排序演算法學習筆記

2021-08-22 06:09:20 字數 1471 閱讀 4041

直接插入

二分法插入

希爾插入

氣泡排序

快速排序

插入排序是一種遞迴思想,由n-1趟排序組成。

初始時,只考慮陣列下標0,只有乙個元素,預設是有序的。

然後第一趟 對下標為1的元素進行排序,保證陣列[0,1]上的元素有序;

第二趟 對下標2處的元素進行排序,保證陣列[0,2]上的元素有序;

第n-1趟對下標n-1處元素進行排序,保證陣列[0,n-1]上的元素有序,

它的遞迴思想體現在:當對位置i處的元素進行排序時,[0,i-1]上的元素一定是有序的了。

public static > void insertsort(t a) a[j] = tmp;//插入到合適的位置 } }

對left,right賦值與中間一位數比較,

對left,right重新賦值,再與中間值比較

直到值一樣,或者right-1 = left

把值插入到left的右邊

經過n-1趟直接選擇排序得到有序結果:

第一趟選擇陣列中最小的數字,與第一位交換位置,得到1個長度新的有序區域和長度-1的新無序區

第二趟選擇無序陣列中最小的陣列,與第二位交換位置,得到2個長度的有序區域和長度-2的新無序區

第n-1趟後

得到n個長度的有序區域

歸併排序比較占用記憶體,但卻是一種高效且穩定的演算法。

歸併操作(merge):將兩個順序序列合併成乙個順序序列。

雙層for迴圈

比較相鄰的元素,如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。

針對所有的元素重複以上步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較

氣泡排序的優化

選擇陣列首個元素為基數,

比基數大的數字放到基數的後面,比基數小的放到基數前面,使用遞迴方法不斷分割陣列。

以此達到整個資料變成有序序列。

按照陣列中的元素的個位數放到【0,9】的桶子裡

個位數是0 放到桶子0裡面

個位數是1 放到桶子1裡面

放完了以後,根據桶子從0-9重新排好序

按照陣列中的元素的十位數放到【0,9】的桶子裡

十位數是0 放到桶子0裡面

十位數是1放到桶子1裡面

放完了以後,根據桶子從0-9重新排好序。

由最大數字的位數來確定就幾輪操作

位數大的使用msd(最高位優先most significant digit first)方法排序,

位數小的使用lsd (最低位優先last significant digit first)方法排序

氣泡排序演算法 演算法學習筆記

最近準備換工作,然後面了幾家公司,收到了乙份還算滿意的offer。面試過程中發現大公司都會喜歡面一些演算法題。對於經常關注演算法的人而言可能並不難,因為都是一些基礎題,比如快速排序 氣泡排序 二叉樹等等。但是對於平時工作從不關心演算法的人而言那可真的夠頭大的。今天覆習了氣泡排序,順便記錄下。也提醒下...

基礎 排序演算法學習筆記

noip範疇常見的排序一般是這幾種 1 氣泡排序,選擇排序,插入排序 2 快速排序,歸併排序,堆排序 3 計數排序,基數排序,桶排序 前兩類是基於比較的,第三類是基於統計的。第一類都是o n 2 的,第二類都是o nlogn 的。氣泡排序 1.相鄰的資料兩兩比較,小數放前面,大數放後面 2.這樣每一...

演算法學習筆記 快速排序

在學習左神的演算法課,對快速排序有了更多的理解,在此記錄,以備後查 描述 快排1.0是基於單個支點進行遞迴操作。大體來講,是選擇陣列arr中的某乙個數作為支點pivot,經過一通操作 一般叫partition 使得左邊的數均小於等於pivot,右邊的數均 pivot,如此一來,pivot就待在了自已...