#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)