快速排序为O(N*LogN)时间复杂度,对于中值的选择关系到排序的效率,所以也是一种不稳定的排序算法。而且使用了递归调用(所以大数据量的时候,对于开发环境最大支持递归数要有个确认,否则会栈溢出的,下场很难看),由于大量使用循环语句,对于死循环的警惕是十分必要的。总得来说快速排序是中不错的排序算法,在笔试面试中均常用来考查,呵呵。
#include "stdafx.h"
#include "stdio.h"
void QuickSort(int* pData, int start, int end)
{
int mid = (start + end) / 2;
int left = start;
int right = end;
do
{
//找一个大于中值的数
while(pData[left] < pData[mid] && left < end)
left++;
//找一个小于中值的数
while(pData[right] > pData[mid] && right > start)
right--;
//交换这两个数,数列前半部为小于中值的数,后半部为大于中值的数
if( left <= right )
{
int temp = pData[left];
pData[left] = pData[right];
pData[right] = temp;
//不要忘了下标增量
left++;
right--;
}
} while(left <= right);//遍历完毕
//对前半部快排
if( start < right )
QuickSort(pData, start, right);
//对后半部快排
if( end > left )
QuickSort(pData, left, end);
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[] = {11, 25, 57, 93, 27, 32, 2, 90, 86, 53};
int count = sizeof(A) / sizeof(A[0]);
QuickSort(A, 0, count-1);
for( int i = 0; i < count; i++ )
printf("%d ", A[i]);
return 0;
}