快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,

其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,

整个排序过程可以递归进行,以此达到整个数据变成有序序列。


一趟快速排序的算法是:

  1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;

  2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];

  3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;

  4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;

  5)、重复第3、4步,直到I=J;


改进后的快速排序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(int array[],int start,int end)
{
    if(start<end)
    {
        int value=array[start];
        int low=start;
        int high=end;
        while(low<high)
        {
            while((low<high)&& value<array[high])
                high--;
            array[low]=array[high];
            while((low<high)&& value>array[low])
                            low++;
                        array[high]=array[low];
        }
        array[low]=value;
        sort(array,start,low-1);
        sort(array,low+1,end);
    }
}
int main(int argc, char **argv) {
    int array[]={2,4,9,3,6};
    int i=0;
  sort(array,0,4);
    for(;i<5;i++)
    {
      printf("%d\t",array[i]);
    }
    return 0;
}


参考链接:http://blog.csdn.net/sws9999/article/details/2791812