主要幾種排序演算法的思維導圖
1、直接插入排序
從第乙個數開始依次向它的前乙個數比較,如果這個數大,則將之前的數向後移位(每次排序會需要移動很多其他的數)
* 直接插入排序的原理
*/public class insertsort ;
insertsort(a);
for(int i = 0; i=0 && a[j]>insertnum)
// 插入當前數
a[j+1]=insertnum;}}
}2、希爾排序希爾排序是直接插入排序改良的演算法,又稱縮小增量排序。
將數的個數設為n,k=n/2(k取奇數),將下標差值(增量)為k的數分為一組,分組進行排序。
(增量縮小)再取k=k/2 (k取奇數),將下標差值為k的數分為一組,分組進行排序。
重複第二步,直到k=1,最後執行簡單插入排序。
引用:
//希爾排序
public class shellsort ;
sheelsort(a);
for(int i = 0; i= 0 && temp < a[j]; j -= d)
a[j + d] = temp;}}}}}
快速排序和堆排序詳見本篇部落格:
引用:時間複雜度:有「常數」,「線性」,「對數」,「線性對數」時間複雜度幾大類
o(1) 遍歷的長度為1 ,hashmap的鍊錶長度為1時(理性情況)
o(n) 遍歷的長度為n,hashmap的鍊錶長度為n時(最壞的情況)
o(log2為底n)類似二分查詢每次(幾乎)可以去掉一半的候選數字的問題,輸入的元素個數雖然翻倍,但是程式執行所花的時間卻只增加了 1。
o(nlog2為底n)高效的排序演算法快速、歸併、堆排序
直接插入排序、冒泡、選擇排序,需要兩個for迴圈,平均時間複雜度為o(n的平方)
快速、歸併、希爾、堆排序基於二分思想,log以2為底,平均時間複雜度為o(nlogn)
排序演算法的穩定性:排序前後相同元素的相對位置不變。 演算法不穩定 :「快希選堆」不穩定
學習時間複雜度對於我們的工作有什麼用: 對於不同的資料規模,能夠決策採用不同的解決方案。未完。。引用:
實現排序演算法,時間複雜度為O n
我們常用的排序氣泡排序 o n 2 快速排序o nlogn 堆排序o nlogn 選擇排序o n 2 我們常用的排序都不符合時間複雜度的要求 經常聽說乙個說法 用空間代替時間 現在要排序的陣列為陣列 a 例如a陣列裡面有 1,1,2,2,3,3,2,2,5,5.等等很多無序的數字 那麼我們申請乙個陣...
排序演算法 時間複雜度和空間複雜度
常數階o 1 無論 執行了多少行,只要沒有迴圈複雜結構,那麼這個的時間複雜度就是o 1 o 1 時間複雜度 沒有迴圈結構的順序執行,無論執行多少行,時間複雜度均為o 1 public static voido1 對數階o log2n o log2n 時間複雜度 此處 i 以二倍的速度增長,也就是說到...
排序演算法空間 時間複雜度
排序演算法空間 時間複雜度 簡單排序法 冒泡法是第二維迴圈中自己迴圈,找最小或最大值 選擇排序和交換排序是第二維迴圈與第一維迴圈中的值比較 交換法最清晰,選擇法作了改進,只交換位置標號,演算法複雜度沒變。插入法,它的基本工作原理是抽出牌,在前面的牌中尋找相應的位置插入,然後繼續下一張 較為複雜 高階...