C實現快速排序

2021-08-17 06:38:29 字數 2234 閱讀 9114

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...