快速排序思路如下:
任选数组中一个元素作为关键字,,一趟partition下来的结果保证该关键字大于其左侧的元素,小于其右侧的元素;然后对其左侧和右侧的元素做partition操作;这么递归下去即可排序。
代码如下:
#include <iostream>
using namespace std;
// 对A[low]...A[high]进行分区
int partition(int A[], int low, int high)
{
// 将A[low]设置为关键字
int pivot = A[low];
while (low < high)
{
while (low < high && A[high] >= pivot)
{
high--;
}
A[low] = A[high];
while (low < high && A[low] <= pivot)
{
low++;
}
A[high] = A[low];
}
// 还原pivot到相应的位置
A[low] = pivot;
return low;
}
void QuickSort(int A[], int low, int high)
{
if (low < high)
{
// 获得pivot的位置
int pivotLoc = partition(A, low, high);
QuickSort(A, low, pivotLoc-1);
QuickSort(A, pivotLoc+1, high);
}
}
void main()
{
// 初始化要排序的数组
int A[] = {4,1,3,2,16,9,10,14,8,7};
// 排序
QuickSort(A, 0, sizeof(A)/sizeof(int)-1);
// 打印排序结果
for (int i=0; i<sizeof(A)/sizeof(int); i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
}
结果如下: