Linux C學習筆記 排序演算法4 快速排序

2021-06-19 05:49:45 字數 1047 閱讀 6242

設要排序的陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用第1個資料)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。

一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j -- ),找到第乙個小於key的值a[j],a與a[j]交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i ++ ),找到第乙個大於key的a,a與a[j]交換;

5)重複第3、4、5步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後令迴圈結束。

#include void print_array(int *array, int length)

void quick_sort(int *array,unsigned int first,unsigned int last)

//遞迴呼叫quick_sort,分段排序key前後的無序數列

if(first < key)

quick_sort(array, first, key - 1);

if(key < last)

quick_sort(array, key + 1, last);

}int main(void)

; printf("before quick_sort: ");

print_array(array,10);

quick_sort(array, 0, 9);

printf(" after quick_sort: ");

print_array(array,10);

getchar();

return 0;

}

執行結果如下:

Linux C程式設計 學習筆記4

指向字串的指標 在c語言中,訪問乙個字串有多種方法 可以用字元陣列存放乙個字串。char string linux c printf s n string 注意是 s string是乙個字元陣列名,它同時也是該字元陣列的首位址,即linuxc這個字串的首位址。同理char p linux c pri...

Linux C學習筆記 排序演算法1 插入排序

插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...

linux c排序演算法

基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。include include intmain printf please input eight number for i 0 i 8 i for i 0 i 8 i for j 7 j...