快速排序

快排嘛。不久如此啦。

这个算法的平均时间复杂度可以低到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;
}
posted @ 2015-04-06 22:57  verain  阅读(112)  评论(0编辑  收藏  举报