演算法基礎之排序篇 希爾排序

2021-06-08 13:49:12 字數 684 閱讀 5660

1、演算法描述
希爾排序是一種遞減增量排序,當增量等於1的時候,就成了插入排序,因此希爾排序的最後一步就是普通的插入排序。

操作步驟

(1)、選擇步長di(1<=di<=n),對待排序列進行分割。所有距離為di的資料分到乙個組。

(2)、對每乙個組進行插入排序。

(3)、遞減步長,重複(1)(2),直到步長等於1 

2、圖例

3、**

public void sort(int data) 

data[j] = temp;

}d = d / 2;

} }

4、穩定性和複雜度
穩定性:除非直接第一次就使用步長為1進行排序(那樣就成了直接插入排序),否則希爾排序是不穩定的排序。

平均時間複雜度:o(nlongn)

希爾排序的時間複雜度和步長序列的選擇有很大關係,好的步長序列能減少排序的時間複雜度。一般選擇n/2做第乙個步長,依次遞減為前一次的1/2,直到為1。已知的最好序列是marcin ciura設計(1,4,10,23,57,132,301,701,1750,…)

空間複雜度:o(1)

希爾排序 最壞時間 演算法篇 希爾排序

在之前的文章裡,我們講解了插入排序,而希爾排序相當於對插入排序的一種優化。在這裡我們簡單回顧下插入排序,插入排序的核心思想是,從陣列首位開始,通過遍歷,將相鄰的兩個元素進行排列,小的元素放在前面,大的元素放在後面,並使用遞迴,將調換位置的元素繼續與前面的元素進行比較,一直到前i個元素有序為止。然後重...

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...

排序演算法之希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...