如何快速得写出快速排序
2015-04-08 13:51
225 查看
最近很多同学找实习,面试一个环节是纸上写程序,如快速排序,链表合并等。那如何在短时间内有效写出快排?
快排是一种分治法,每次找到基准并划分数组,再依次递归即可。重点在于如何划分,划分的重点在于从两侧的遍历和替换。(这里初始基准取第一个元素)
压缩代码后快排程序如下:
此为从小到大排序,从大到小的排序只需要把partion里第二层的2个while内>=和<=改成相反即可。
核心代码只有十几行,不要把他想的太复杂。
快排是一种分治法,每次找到基准并划分数组,再依次递归即可。重点在于如何划分,划分的重点在于从两侧的遍历和替换。(这里初始基准取第一个元素)
压缩代码后快排程序如下:
<pre name="code" class="cpp">#include<iostream> using namespace std; int partion(int first,int last,int input[]) { int p=input[first]; while(first<last){ while(first<last && input[last]>=p) last--; input[first]=input[last]; //把小数放p左边 while(first<last && input[first]<=p) first++; input[last]=input[first]; //把大数放p右边 } //此时first=last,返回基准位置即可 input[first]=p; return first; } void quickSort(int first,int last,int input[]) { if(first<last){ int p=partion(first,last,input);//用基准划分 quickSort(first,p-1,input); //基准左侧快排 quickSort(p+1,last,input); //基准右侧快排 } } int main() { int n,input[20]; cin>>n; for(int i=0;i<n;i++) cin>>input[i]; quickSort(0,n-1,input); for(int i=0;i<n;i++) cout<<input[i]<<" "; cout<<endl; system("pause"); return 0; }
此为从小到大排序,从大到小的排序只需要把partion里第二层的2个while内>=和<=改成相反即可。
核心代码只有十几行,不要把他想的太复杂。
相关文章推荐
- SEOer在网站优化中,如何快速的写出原创的文章?
- 如何写出一个较好的快速排序程序
- 快速排序(二) jdk源码中如何优化快速排序
- 如何快速写出一篇软文?
- Android-->如何快速写出属于自己的圆角图片控件
- 如何快速的写出一个Vue的icon组件?
- 教你如何使用layer快速写出好看的弹出框。
- JavaScript 如何快速得写出递归函数
- 如何快速写出漂亮的轮播图、幻灯片?
- VUE -- 如何快速的写出一个Vue的icon组件?
- 万字长文教你如何快速写出干货痛点文案?
- 如何快速写出一个陌生人推荐系统
- MindManager教你如何快速写出一篇好作文
- 如何快速写出递归函数
- 如何快速写出2-归并排序
- 如何快速写出代码,让你的工作效率加倍
- 如何快速写出一篇好作文
- 如何用正确的方法来写出质量好的软件的75条体会[转]
- 如何用正确的方法来写出质量好的软件的75条体会
- 如何用正确的方法来写出质量好的软件的75条体会[转] airskys [原作]