volatile
static
unsigned count = 0;
static
void quicksort(int *baseaddr, unsigned startidx, unsigned endidx)
//判斷輸入序列是否只有乙個元素,該條件為遞迴的結束條件
if(startidx >= endidx)
//每次選擇輸入序列的第乙個元素為基準數;所以從第二個數開始與第乙個數比較;
int i = startidx+1;
int j = endidx;
while(i//複雜度計數
//如果元素i大於基準數,則將該元素跟序列末尾元素j交換位置,j--;
//並且因為當前i已經發生變化,所以不用i++,下一次迴圈再比較i跟j的值;
//如果元素i小於等於基準數,則i++,繼續下一輪迴圈;
//當i==j時,退出迴圈;
if(baseaddr[i] > benchdata)
else
i++;
}//因為在最後一次退出迴圈前有i++操作,i可能已經自增為應該放在基準數右邊元素的序號;
if(baseaddr[i] >= benchdata)
i--;
//交換i元素和序列第乙個元素(基準數);因為基準數肯定是》=i元素的;
baseaddr[startidx] = baseaddr[i];
baseaddr[i] = benchdata;
//對序列的左半部分繼續做排序;
quicksort(baseaddr , startidx, i);
//對序列的右半部分繼續做排序;
quicksort(baseaddr , j, endidx);
return;
}
測試函式如下:
#include
#include
#include
#include
#define arraylen 1000
#define true 1
#define false 0
typedef
unsigned
short
bool;
//序列是否為公升序排列
static
bool isascendingorder(int *baseaddr, unsigned datalength)
i++;
}while(i<(datalength-1));
//printf("the arrray is ascending order!\n");
return
true;
}//序列是否為降序排列
static
bool isdescendingorder(int *baseaddr, unsigned datalength)
i++;
}while(i<(datalength-1));
//printf("the arrray is descending order!\n");
return
true;
}int arraydata[arraylen] = {};
int main(int argc, char *argv)
unsigned i = 0;
for(;isizeof(int));
printf("%d ", arraydata[i]);
if((i+1) %10 == 0)
printf("\n");
}close(randfd);
//對產生的隨機序列做快速排序;
quicksort(arraydata, 0, arraylen-1);
//檢查序列是否已經有序;
if(isascendingorder(arraydata, arraylen))
else
if(isdescendingorder(arraydata, arraylen))
else
printf("the operation count is:%u\n", count);
return
0;}
然後編譯執行:
gcc quicksort.c -o quicksort -wall./quicksort
排序 快速排序,C 實現
本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...
快速排序 c 實現
快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...
快速排序(C 實現)
include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...