昨天刚刚学习了插入排序与归并排序,这里顺便再把快速排序温习一遍,巩固一下,也当成是对排序算法的一个小归纳。
快速排序的原理是:
选用一个参考数,让序列小于参考数的数据全部丢在它左边,比它大的丢在它右边。
注意两边丢完要把参考数归位。
利用递归处理左半部分,再处理右半部分。直到只剩下一个数为止。(left==right)
//需要的参数有 待排列序列a[] 左端指针left 右端指针right
void Qsort(int a[],int left,int right)
{
if(left>=right) //直接跳出
return;
int i,j,t,flag;
i=left;j=right;
flag=a[left];//作为参考数
while(i!=j)
{
while(a[j]>=flag&&i<j)
j--;
while(a[i]<=flag&&i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i]; //这里是把左端归位
a[i]=flag; //这里是把参考数归位
Qsort(a,left,i-1); //处理左半部分
Qsort(a,i+1,right); //处理右半部分
}
本文复习了快速排序算法,详细介绍了其工作原理:通过选取一个参考数并将序列分为左右两部分,使得左侧所有元素小于参考数,右侧所有元素大于参考数,然后递归地对这两部分进行排序。
2万+

被折叠的 条评论
为什么被折叠?



