演算法(第四版)學習日記 希爾排序

2021-10-17 05:26:09 字數 855 閱讀 8803

希爾排序也是屬於插入排序類的一種。

空間效率:o(1)

時間效率:----數學上還未分析出來。

穩定性:不穩定

可適用於大型陣列

基本思想:將待排序陣列分割成若干的「特殊」陣列,形如a[i,i+d,i+2d······,i+kd],將這些陣列進行排序使其有序。通過逐步減小步長d至1,結果使整個陣列有序。

摘自演算法(第四版)書中的一段話

如何選擇遞增序列呢?要回答這個問題並不簡單。演算法的效能不僅取決於h,還取決於h 之間的數學性質,比如它們的公因子等。有很多**研究了各種不同的遞增序列,但都無法證明某個序列 是 「 最好的」 。算 法 2.3中遞增序列的計算和使用都很簡單,和複雜遞增序列的效能接近。但可以證明複雜的序列在最壞情況下的效能要好於我們所使用的遞增序列。更加優秀的遞增序列有待我們去發現。和選擇排序以及插人排序形成對比的是,希爾排序也可以用於大型陣列。它對任意排序(不一定是隨機的)的陣列表現也很好。實際上,對於乙個給定的遞增序列,構造乙個使希爾排序執行緩慢的

**如下(示例):

public

class

shellsort

h = h/3;

}}//v < w? 比較大小

private

static

boolean

less

(comparable v, comparable w)

//交換 a[i] 和a[j]

private

static

void

exch

(comparable[

] a ,

int i,

int j)

《演算法(第四版)》排序 希爾排序

由 插入排序 可知,它是一種不穩定的演算法,當序列已經接近有序時,排序速度較快,但是如果最小的在最後面,那可能需要最小的交換了n 1次才能換到最前面。希爾排序在插入排序的基礎上進行了改進,交換不相鄰的元素,以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序,具體做法如下。1.假設陣列長...

《演算法(第四版)》排序 模板

本書對排序類演算法有乙個模板,包括了以下幾種方法 1 sort 這個方法裡面實現的就是排序的演算法 2 less 這個方法裡是利用了comparable介面裡的compareto方法,其中compareto方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數 這個方法如果compa...

《演算法(第四版)》排序 堆排序

1.什麼是堆?講堆排序之前,先了解一下什麼是堆。堆其實相當於一種資料結構,它的本質是一種陣列物件,但是它裡面的內同又是一顆完全二叉樹結構,它的特點是父節點的值大於 或小於 兩個子節點的值,常常用於優先佇列 堆排序等。堆在陣列中的索引有如下的特點。陣列索引為k的元素,它的父節點的索引為 k 2 下取整...