006 排序演算法 希爾排序

2022-02-12 04:34:12 字數 1416 閱讀 6631

一、概述

希爾排序(shell's sort)是插入排序的一種又稱「縮小增量排序」(diminishing increment sort),是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於2023年提出而得名。 

排序方法

時間複雜度(平均)

時間複雜度 (最壞)

時間複雜度(最好)

空間複雜度

穩定性使用場景

希爾排序

o(n*(logn)2)

o(n2)

o(nlogn)

o(n)

不穩定中等資料規模

1.1、演算法說明

首先它把較大的資料集合分割成若干個小組(邏輯上分組),然後對每乙個小組分別進行插入排序,此時,插入排序所作用的資料量比較小(每乙個小組),插入的效率比較高

可以看出,他是按下標相隔距離為4分的組,也就是說把下標相差4的分到一組,比如這個例子中a[0]與a[4]是一組、a[1]與a[5]是一組...,這裡的差值(距離)被稱為增量

每個分組進行插入排序後,各個分組就變成了有序的了(整體不一定有序)

此時,整個陣列變的部分有序了(有序程度可能不是很高)

然後縮小增量為上個增量的一半:2,繼續劃分分組,此時,每個分組元素個數多了,但是,陣列變的部分有序了,插入排序效率同樣比高

同理對每個分組進行排序(插入排序),使其每個分組各自有序

1.2、**實現

public

static

void shellsort(int

a) a[j + d] =temp;}}

if (d == 1) }}

32 排序演算法(5) 希爾排序

直接插入排序演算法 straight insertion sort 適用於基本有序且記錄數少的陣列,但是這樣的要求已經算比較苛刻了。所以乙個直觀的改進方法是,對於乙個陣列,可以使它變得基本有序,再用用希爾排序改進直接插入排序就會得到比較好的結果,如下圖所示 初始的時候將間隔為 4 的元素通過直接插入...

演算法 排序1 排序

題目 給定n個 長整型範圍內的 整數,要求輸出從小到大排序後的結果。本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下 輸入第一行給出正整數n 10 5 隨後一行給出n個 長整型範圍內的 整數,其間以空格分隔。在一行中輸出從小到大排序後的結果,數字間以1個空格分隔,行末不得...

四 排序演算法

1.快速排序 procedure qsort l,r integer var i,j,mid integer begin i l j r mid a l r div 2 repeat while a i mid do dec j if i j then begin swap a i a j inc ...