快速排序:冒泡排序的一種改進(jìn)排序方法
基本思想:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,
然后再按次方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,以此達(dá)到整個數(shù)據(jù)變成有序序列 。
??????? “快速排序法”使用的是遞歸原理,下面我結(jié)合一個例子來說明“快速排序法”的原理。首先給出一個數(shù)組
{53,12,98,63,18,72,80,46, 32,21},先找到第一個數(shù)--53,把它作為中間值,也就是說,要把53放
在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18,53,80,72,63,98},這樣
一個數(shù)組的排序就變成了兩個小數(shù)組的排序--53左邊的數(shù)組和53右邊的數(shù)組,而這兩個數(shù)組繼續(xù)用同樣的方式
繼續(xù)下去,一直到順序完全正確。
結(jié)合理論知識整理下幾種實現(xiàn)快速排序的算法,可以提供參考的,不足之處,還請多指教!
/*方法一:*/
int sort(int *array, int left, int right)
{
int i, j, tmp;
i=left;
j=right;
tmp = array[left];
while(i=tmp)
{
j--;
}
if(i
/*方法二:*/
void QuickSort2(int *array, int min, int len)
{
int i, j, tmp;
i = min;
j = len;
if(i=tmp)
{
j--;
}
if(i
/*方法三*/
void QuickSort3(int *array, int min, int len)
{
int i,j,tmp;
if(min>len)
{
return;
}
i = min;
j = len;
while(i!=j)
{
tmp = array[i];
while(itmp)
{
j--;
}
if(i
提供了測試程序代碼,驗證下是否正確。#include
#include
#include
void PrintArray(int *array)
{
int i;
for(i=0; i<10; i++)
printf("%d ", array[i]);
printf("n");
}
int main(int argc, char **argv)
{
int array[10]={7,2,4,1,3,8,9,6,5,0};
PrintArray(array);
//QuickSort1(array, 0, 10);
//QuickSort2(array, 0, 10);
QuickSort3(array, 0, 10);
PrintArray(array);
return 0;
}