快速排序是由氣泡排序改進而得的,相比氣泡排序,快速排序的一次交換可能消除多個逆序。其平均時間複雜度為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...