快速排序是對冒泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,
其中一部分的所有數據都比另外一不部分的所有數據都要小,然後再按次方法對這兩部分數據分別進行快速排序,
整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
一趟快速排序的算法是:
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
本文出自 “技術在於堅持” 博客,請務必保留此出處http://minilinux.blog.51cto.com/4499123/1285015