引
快排嘛。不久如此啦。
这个算法的平均时间复杂度可以低到O(n log n)。
原理
通过寻找到一个基准点,把所有需要排序的数,分成两类,一类小于基准数,一类大于基准数。
在寻找完毕以后,把基准点放到两类数中间。 然后对原来基准点前后两部分数,分别重复以上步骤。 这极好地体现了分治和二分的思想。上代码
#include "stdio.h"//define a gloable arryint a[100];int QuickSort(int left , int right){ if(left > right) { return 1; } int i = left; int j = right; int temp = a[left]; while( i != j) { while(a[j] >= temp && i < j) { j--; } while(a[i] <= temp && i < j) { i++; } if (i < j) { int temp2 = a[i]; a[i] = a[j]; a[j] = temp2; } } a[left] = a[i]; a[i] = temp; QuickSort(left,i-1); QuickSort(i+1,right);}int main(int argc, char const *argv[]){ for (int l = 0; l < 100; ++l) { a[l] = rand() % 100; //printf("%d\n",a[l]); } QuickSort(0,99); for (int l = 0; l < 100; ++l) { printf("%d\n",a[l]); } return 0;}