上一篇博客,我们讲到了交换排序的冒泡排序,今天我们来讲一下交换排序的另外一种排序——快速排序。
快速排序是对冒泡排序的一种改进。它的基本思想是:在n个记录中去某一个记录的键值为标准(通常选第1个)通过一趟排序后将n个记录分为不小于这个键值和小于这个键值的两个独立的部分。然后对这两个部分分别进行快速排序,以达到整个序列有序。
快速排序的过程:
快速排序的代码如下:
void quickSort(int s[], int l, int r)
{
if (l< r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
快速排序的要点是先选中一个“标准”,然后都以此为标准来进行比较和交换。
快速排序是一种不稳定算法,他的时间和空间复杂度都是O(Nlog2N)。