快速排序算法步骤:
从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
#include <iostream>
using namespace std;
void swap(int a[], int low, int high)
{
int t = a[low];
a[low] = a[high];
a[high] = t;
}
int partition(int a[], int low, int high)
{
int point = a[low];
while(low<high)
{
while(low<high && a[high]>=point)
{
high--;
}
swap(a,low,high);
//}
while(low<high && a[low]<=point)
{
low++;
}
swap(a,low,high);
}
return low;
}
void paixu(int a[], int low, int high)
{
if(low<high){
int point = partition(a,low,high);
paixu(a,low,point-1);
paixu(a,point+1,high);
}
}
int main()
{
int i;
int a[] = {23,34,6,24,62,88,109,27,6,18,1,17};
int n = 12;
paixu(a, 0, n-1);
for(i=0; i<n; i++)
cout << a[i]<<endl;
return 0;
}