直接插入
二分法插入
希爾插入
氣泡排序
快速排序
插入排序是一種遞迴思想,由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就待在了自已...