c++快排算法的实现代码实例。快速排序算法是非常重要而且是经常要使用的算法之一,该算法是Tony Hoare设计的,它涉及了递归函数的应用。c++的STL、Java SDK以及.net framework中都有各自的实现,可见它的应用非常广泛。
快排算法基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。所以快速排序的基本步骤如下:
1. 从数列中挑出一个元素,称为 “基准”(pivot)。
2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
以下是c++程序快排的实现代码:
#include <iostream>
using namespace std;
//———————————————————-
// 快速排序 O(NlogN)
// 返回调整后基准数的位置
int partition(int data[], int low, int high)
{
int i = low, j = high;
int x = data[low];
while (i < j)
{
// 从右向左找小于x的数来填data[i]
while(i < j && data[j] >= x)
j–;
if(i < j)
{
data[i] = data[j]; // 将data[j]填到data[i]中,data[j]就形成了一个新的坑
i++;
}
// 从左向右找大于或等于x的数来填data[j]
while(i < j && data[i] < x)
i++;
if(i < j)
{
data[j] = data[i]; // 将data[i]填到data[j]中,data[i]就形成了一个新的坑
j–;
}
}
// 退出时,i等于j。将x填到这个坑中。
data[i] = x;
return i;
}
void quickSort(int data[], int low, int high)
{
if (low < high)
{
int pivot = partition(data, low, high);
quickSort(data, low, pivot – 1);
quickSort(data, pivot + 1, high);
}
}
int main()
{
int array[] = {9, 6, 3, 8, 7, 1, 5, 2, 4};
int count = sizeof(array) / sizeof(array[0]);
quickSort(array, 0, 8);
for(int i = 0; i < count; ++i)
cout << array[i] << ” “;
cout << endl;
return 0;
}