希爾排序演算法

2021-10-22 18:20:41 字數 1489 閱讀 6803

演算法筆記–希爾排序

希爾排序是插入排序的一種,它是針對直接插入排序演算法的改進,看起來也比較抽象,現實生活中感覺比較類似的例子是撲克洗牌整理牌的過程。它的核心是在大方向分組有序,然後逐漸細化分組有序,最終達到統一有序。希爾排序時間複雜度是o(n^(1.3-2)),空間複雜度為常數階o(1)。希爾排序沒有時間複雜度為o(n(logn))的快速排序演算法快 ,因此對中等大小規模表現良好,但對規模非常大的資料排序不是最優選擇,總之比一般o(n^2 )複雜度的演算法快得多。

看圖理解

解題:用乙個陣列來表示元素集合

先二分好gap,並對gap內元素排序

再細化gap,並對gap內元素排序,結合**好好體會圖2的過程,這裡有乙個插入排序的過程

重複步驟直至陣列完全排序

案例實踐

public

class

shellsort

;sort

(a);

// sortoptimize(a);

for(

int i =

0; i < a.length; i++)}

private

static

void

sort

(int

arr)}}

// system.out.println("增量為 " + gap + " 的這一輪排序後:" + arrays.tostring(arr));}}

/** * 插入排序採用移動法

* 插入排序時減少了值的交換

*/private

static

void

sortoptimize

(int

arr)

唯一不同的是,這裡的組前乙個是按增量來計算的

*/// 每一輪,都是針對某乙個組的插入排序中:待排序的起點

for(

int i = gap; i < arr.length; i++

)// 對找到的位置插入值

arr[insertindex + gap]

= currentinsertvalue;

}// system.out.println("增量為 " + gap + " 的這一輪排序後:" + arrays.tostring(arr));}}

}

排序演算法 希爾排序

如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...

排序演算法 希爾排序

摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...

排序演算法 希爾排序

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...