#include "stdafx.h"
int a[101], n;
void quicksort(int left, int right) {
int i,j,t,temp;
if(left>right)
return ;
temp = a[left];//存储基准数
i = left;
j = right;
while(i!=j) {
//先从右往左找
while(a[j] >= temp && i<j) {
j--;
}
//再从左往右找
while(a[i] <= temp && i<=j) {
i++;
}
//交换两个数再数组中的位置
if(i<j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//最终将基准数归位
a[left] = a[i];
a[i] = temp;
quicksort(left, i-1);//继续处理左边的,递归
quicksort(i+1, right);//继续处理右边的,递归
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,t;
scanf_s("%d", &n);
for(i=1;i<=n;i++) {
scanf_s("%d", &a[i]);
}
quicksort(1, n);
//输出结果
for(i=1;i<=n;i++) {
printf("%d ", a[i]);
}
getchar();
getchar();
return 0;
}
快速排序基于二分思想,最差时间复杂度为O(N2),平均时间复杂度为O(NlogN)