C語言快速排序演算法的實現

2021-07-26 10:31:46 字數 1338 閱讀 3148

快速排序是由氣泡排序改進而得的,相比氣泡排序,快速排序的一次交換可能消除多個逆序。其平均時間複雜度為o(nlog2n),空間複雜度最好情況下為o(log2n),最壞情況下為o(n)。適用於順序結構,不適用於鏈式結構,不穩定,適合於初始記錄無序,n比較大的情況。

下面是實現**:

首先是預定義和型別定義:

#define ok 1

#define error 0

typedef int status;

typedef int elemtype;

typedef structsqlist;

順序表的插入:

status ensqlist(sqlist *l, elemtype e, int i)

快速排序演算法:

int partition(sqlist *l, int low, int high)

l->elem[low] = l->elem[0];

return low;

}void qsort(sqlist *l, int low, int high)

}void quicksort(sqlist *l)

partition()函式:

先將以low為下標的元素儲存在下標為0的元素中,當low小於high時,則執行迴圈:先從high開始,逐步檢查是否存在元素比下標為0的元素小的值,若在low大於high之前有這樣的元素存在,即將這個元素的值賦值給下標為low的元素(low的值在此之前已經儲存在其他位置,或下標為0的位置,或此次迴圈開始時high的位置);同理,若在low大於high之前有元素大於下標為0的元素,則將其值賦值給下標為high的元素值。

迴圈結束後,將下標為0的元素值賦值給下標為low的元素值,此時下標low的元素必然為最終排序後該位置的元素。

qsort()函式:

如果lowquicksort()函式:

呼叫qsort()。

加入main()函式:

int main(void)

printf("原陣列:");

for (i = 1; i <= n; i++)

printf("%d ", l.elem[i]);

printf("\n");

quicksort(&l);

printf("排序後:");

for (i = 1; i <= n; i++)

printf("%d ", l.elem[i]);

printf("\n");

return 0;

}

快速排序演算法 C語言實現

快速排序演算法 c語言實現 注 本篇內容為翻譯,之所以選擇這篇進行翻譯原因是該文章含有動畫,能夠更加直觀地展示快速排序。同時,可以仔細看一下 中把結構化的思想給予了更加充分地表現。按照功能進行模組劃分的思想得到了徹底地貫徹。以下內容翻譯自 譯文 在快速排序演算法中,使用了分治策略。首先把序列分成兩個...

快速排序演算法 C語言實現

注 本篇內容為翻譯,之所以選擇這篇進行翻譯原因是該文章含有動畫,能夠更加直觀地展示快速排序。同時,可以仔細看一下 中把結構化的思想給予了更加充分地表現。按照功能進行模組劃分的思想得到了徹底地貫徹。以下內容翻譯自 譯文 在快速排序演算法中,使用了分治策略。首先把序列分成兩個子串行,遞迴地對子序列進行排...

快速排序演算法(C語言實現)

自實現部分可參看慕課網陳越老師資料結構課程。庫函式函式原型 void qsort void buf,size t num,size t size,int compare const void const void 函式說明 對buf指向對資料 包含num項,每項的大小為size 進行快速排序。voi...