基礎排序
資料結構與演算法之基礎排序(冒泡/插入/選擇)《十》
希爾排序
希爾排序又稱為縮小增量排序。該演算法是乙個泛化的插入排序,插入排序在序列幾乎有序的情況下非常有效。希爾排序利用此特性,分多路並使用不同的間距進行插入排序,當間距為1是則就是簡單的插入排序,本質上希爾排序是插入排序的簡單拓展
優點 對中等大小的序列非常有效
是所有已知o(n^2)排序演算法中最快的
相對簡單的排序演算法
缺點 較大序列不是個好的選擇
不及 歸併 堆 快速排序有效
明顯比 歸併 堆 快速 排序慢
演算法 選擇合適的間距 將序列分成n路
每路使用插入排序
重複上述過程直至間距為1
堆排序
堆排序是一種基於比較的排序演算法,該演算法同時屬於選擇排序。雖然在大多數計算機上的執行效率低於快速排序。但是堆排序最大的優勢是在最壞情況下o(nlogn)
關於堆的基礎知識參考資料結構與演算法之優先佇列《九》
希爾排序
public
void
sortbyshell2(int a)
// 插入到正確位置
a[n] = x; }}
// 步長為1時便是插入排序了 排序也就完成了
if (d == 1)
}}
堆排序
// 調整堆父節點小
public
void adjustheap(int heap, int node, int length)
// 如果父節點大於孩子中最小的
if (heap[node] < heap[child]) else
// 調整完畢 找到了正確位置
heap[node] = temp;}}
// 建立堆
public
void buildheap(int arr, int length)
}// 將建立好的堆進行堆排序
public
void sortbyheap(int array, int length)
}
到此希爾排序和堆排序介紹完畢 資料結構與演算法 希爾排序
希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的 1 修改直接插入排序的 實現增量為gap的直接插入排序。將陣列從start到end中間隔為gap的子串行進行直接插入排序 private static void straightinser...
資料結構 演算法 希爾排序
希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...
資料結構與演算法(八)希爾排序
希爾排序 1.希爾排序的產生 希爾排序是由科學家donald l.shell提出的,希爾排序基於插入排序,並新增了一些新的特性,從而大大提高插入排序的執行效率。2.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...