数据结构基础(15)------------QuickSort
1.QuickSort的基本思想是
:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
2.快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。
3.在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
4.代码实现:
int Partition(int *a,int begin,int end)
{
int key=a[begin];
while (begin<end) //表的两端交替向中间扫描
{
while (begin<end && a[end]>=key)
--end;
//将比枢轴小的记录交换到低端
int temp=a[begin];
a[begin]=a[end];
a[end]=temp;
while (begin<end && a[begin]<=key)
++begin;
//将比枢轴大的记录交换到高端
temp=a[begin];
a[begin]=a[end];
a[end]=temp;
}
return begin; //返回枢轴所在的位置
}
void QuickSort(int *a,int begin,int end)
{
if (begin<end)
{
int pivot=Partition(a,begin,end);//将a中的begin--end范围的数组一分为二
QuickSort(a,begin,pivot); //对低子表进行递归排序
QuickSort(a,pivot+1,end); //对高子表进行递归排序
}
}