C C 七大排序演算法 快速排序

2021-10-06 04:37:14 字數 2830 閱讀 7367

接上面的故事未完待續, 除了歸併長老外, 還有另外一位快速長老的快速**也是被小小桂子讚不絕口, 大呼奇妙! 這位快速長老的演算法思想時這樣的:

1、每次選取第乙個數為基準;

2、然後使用 「乾坤大挪移」 將大於和小於基準的元素分別放置於基準數兩邊;

3、繼續分別對基準數兩側末端未排序的資料使用分治法進行細分處理, 直至整個序列有序.

對於下面待排序的陣列;

第一步: 先選擇第乙個數 163 為基準數, 以 163 為基準將小於它的數排在它前面, 大於等於他的數排在其後, 結果如下:

此處, 快速長老介紹具體排序資料的步驟

1、確認 163 為基準數後, 先把 163 從陣列中取下來

2、然後從最右開始, 查詢小於基準數 163 的數, 找到 162 , 將其移至空出來的元素中

3、接下來, 從最左邊未處理的元素中從左至右掃瞄比基數 163 大的數, 將其移動至右側空出來的元素中

4、接下來, 繼續從最右邊未處理的元素中從右至左掃瞄比基數 163 小的數, 將其移動至左側空出來的元素中

接下來再重複執行步驟3, 171執行右移

重複執行步驟4, 此時右邊的值已經均大於基數(163), 左邊的值均已小於基數

接下來我們將基數(163)儲存回黃色空格中

第二步: 採用分治法分別對基數左邊和右邊的部分運用第一步中的方法進行遞迴操作, 直到整個陣列變得有序, 以左邊的陣列為例:

選擇 162 為基數, 運用 「乾坤大挪移**」 得到結果如下:

以 162 為界, 把陣列分成兩個部分, 此時, 基數右側已經沒有資料, 所以, 接下來只要繼續對左側的陣列分治處理即可, 選擇 159 為基數, 再次運用 「乾坤大挪移**」 得到結果如下:

參考:

#include

#include

intpartition

(int arr,

int low,

int high)

if(i < j)

/* 右邊已經找到小於基數的數 */

while

(i < j && arr[i]

< base)

if(i < j)

/* 左邊已經找到大於基數的數 */

} arr[i]

= base;

}return i;

}/* 實現快速排序 */

void

quicksort

(int

* arr,

int low,

int high)

}int

main()

;int len =

sizeof

(arr)

/sizeof

(arr[0]

);/*int index = partition(arr, 0, len - 1);

printf("分割槽完畢, 基數下標: %d\n", index);*/

quicksort

(arr,

0, len -1)

;printf

("執行快速排序後的結果: \n");

for(

int i =

0; i < len; i++

)printf

("\n");

system

("pause");

return0;

}

執行環境: vs 2019

執行結果:

學到的知識要, 多複習, 多總結, 多敲. 需要時間的積累, 才能引起質的改變. 自己寫不出來的永遠是別人的.

分享一下我的技巧: 代數法把具體的數字帶進去, 看看能能能找到規律(掌握思想).

還有就是畫圖, 也很重要. 用筆畫出來, 把數代進去, 方法雖然笨, 但真的很實用, 好記憶不如爛筆頭!!! 還有多用debug(除錯工具)

最近學作業系統我認為, 學什麼都要成本(時間), 即使它是免費的, 我個人認為要挑來學, 挑重點來學, 而不是從頭到尾, 除非考試考研.

這個知識點我沒有完全掌握(4/10), 革命尚未成功, 同志還需努力!!! , 我會回來反覆複習的

今日是: 2023年5月17日, (由於疫情的原因)現在沒有返校. 寫部落格,也可自己加強記憶,就當寫寫日記吧!!!

希望給個贊: 反正你又不虧, 順便而已

C C 七大排序演算法 之 「氣泡排序」

排序 即將一組混亂的資料按從小到大或者從大到小的順序進行有序的排列出來。氣泡排序演算法 思路解答 從第乙個資料開始,與其後乙個資料進行比較,如果後面的資料比他小,則它兩互相交換位置 然後再從第二個資料開始,與其後乙個資料進行比交,如果後面的資料比他小,則它兩互相交換位置 然後再從第三個資料開始 如果...

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...