一、思想
快速排序是对冒泡排序的一种改进。其基本思想是基于分治法的:在代排序表L[1...n]中任取一个元素pivot作为基准,通过一趟排序将待排序表划分为独立的两部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中的所有元素小于pivot,L[k+1...n]中的所有元素大于或等于pivot,则pivot放在了其最终位置L(k)上,这个过程称作一趟快速排序。而后分别递归地对两个子表重复上述过程,直至每部分内只有一个元素或空为止,即所有元素放在了其最终位置上。
二、代码
void QuickSort(int a[],int low,int high)
{
if(low < high)
{
int pivot = partition(a, low, high);
QuickSort(a, low, pivot-1);
QuickSort(a,pivot+1,high);
}
}
int partition(int a[],int low,int high)
{
int pivot = a[low];
while(low < high)
{
while(low < high && a[high] >= pivot)
high--;
if(low < high)
a[low] = a[high];
while(low < high && a[low] <= pivot)
low++;
if(low < high)
a[high] = a[low];
}
a[low] = pivot;
return low;
}
三、测试
例子a[] = {52,49,80,36,14,58,61,97,23,75}
排序结果:
14 23 36 49 52 58 61 75 80