快速排序算法它的时间复杂度为O(nlog2n),空间复杂度为O(log2n),其效率较高,并且它的排序思想-----分治法也非常实用,故常出现于腾讯、微软等知名IT公司的笔试面试中。
该方法的基本思想是:
- 先从数列中取出一个数作为基准数。(本题中数组第一个数为基准数)
- 分区过程,将小于或等于它的数全放到它的左边,将大于它的数全放到它的右边。(挖坑-填坑)
- 再对左右区间重复第二步,直到各区间只有一个数。(递归-分治)
下列已给出部分程序代码,请补全(只有quickSort函数需要补全)。
#include#define LENTH 10 int AdjustArray(int s[], int l, int r); // 返回调整后基准数的位置d的函数 void quickSort(int s[], int l, int r); // 快速排序的主函数 int main() { int arr[LENTH], i; for (i=0; i = x) j--; if (i < j) s[i++] = s[j]; // 将s[j]填到s[i]中,s[j]就形成了一个新的坑 // 从左向右找大于或等于x的数来填s[j] while (i < j && s[i] < x) i++; if (i < j) s[j--] = s[i]; // 将s[i]填到s[j]中,s[i]就形成了一个新的坑 } // 退出时,i等于j,将x填到这个坑中 s[i] = x; return i; } // 快速排序主函数 void quickSort(int s[], int l, int r) { ..... ..... ..... ..... }
一列整数
输出从小到大排序的数列
输入输出样例样例输入 #1
11 55 14 63 88 47 31 24 11 0
样例输出 #1
0 11 11 14 24 31 47 55 63 88
参考解答:
int p = AdjustArray(s, l, r);
if (l < p - 1)
{
quickSort(s, l, p - 1);
}
if (p < r - 1)
{
quickSort(s, p + 1,r);
}



