C/C++面试题:编程实现快速排序
考点:快速排序算法的实现
出现频率:★★★★
解析:
源代码如下:
void quick_sort(int a[], int low, int high)
{
int i, j, pivot;
if (low < high)
{
pivot = a[low];
i = low;
j = high;
while(i<j)
{
while (i<j && a[j]>=pivot)
j--;
if(i<j)
a[i++]=a[j]; //将比pivot的元素移到低端
while (i<j && a[i]<=pivot)
i++;
if(i<j)
a[j--] = a[i]; //将比pivot大的元素移到高端
}
a[i] = pivot; //pivot移到最终位置
quick_sort(a, low, i-1); //对左区间递归排序
quick_sort(a, i+1, high); //对右区间递归排序
}
}
这里pivot代码基准值,它的初始值为a[low]。局部变量i和j分别代表low和high的位置。接着按照下面的步骤进行一趟交换:
(1)把比pivot的元素移到低端(low)
(2)把比pivot大的元素移到高端(high)
(3)pivot移到最终位置,此时这个位置的左边元素的值都比pivot小,而其右边元素的值都比pivot大。
(4)对左、右区间分别进行递归排序。从而把前三步的粗排序逐渐的细化,直至最终low和high交汇。
测试程序如下:
void main()
{
int data[9] = {54,38,96,23,15,72,60,45,83};
quick_sort(data, 0, 8); //快速排序
for(int i = 0; i<9; i++)
cout << data[i] << " "; //打印排序后的数组
}
执行结果:
15 23 38 45 54 60 72 83 96
更多C/C++面试题,C/C++电子书,C/C++视频请参考"爱学网izixue"
转载于:https://blog.51cto.com/genwoxuec/504110