快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一趟快速排序的算法是:
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