引
快排嘛。不过如此啦。
这个算法的平均时间复杂度可以低到O(n log n)。
原理
通过寻找到一个基准点,把所有需要排序的数,分成两类,一类小于基准数,一类大于基准数。
在寻找完毕以后,把基准点放到两类数中间。
然后对原来基准点前后两部分数,分别重复以上步骤。
这极好地体现了分治和二分的思想。
上代码
#include "stdio.h"
//define a gloable arry
int 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;
}