您的位置:首页 > 职场人生

如何快速得写出快速排序

2015-04-08 13:51 176 查看
最近很多同学找实习,面试一个环节是纸上写程序,如快速排序,链表合并等。那如何在短时间内有效写出快排?

快排是一种分治法,每次找到基准并划分数组,再依次递归即可。重点在于如何划分,划分的重点在于从两侧的遍历和替换。(这里初始基准取第一个元素)

压缩代码后快排程序如下:

<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内>=和<=改成相反即可。

核心代码只有十几行,不要把他想的太复杂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 面试