日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[数据结构] 希尔排序

發布時間:2025/5/22 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据结构] 希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

  希爾排序法(縮小增量法) 屬于插入類排序,是將整個無序列分割成若干小的子序列分別進行插入排序的方法。

  把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。

希爾排序是基于插入排序的以下兩點性質而提出改進方法的:

  • 插入排序在對幾乎已經排好序的數據操作時,效率高,即可以達到線性排序的效率。

  • 但插入排序一般來說是低效的,因為插入排序每次只能將數據移動一位。

實現過程

  先取一個正整數d1小于n,把所有序號相隔d1的數組元素放一組,組內進行直接插入排序;然后取d2小于d1,重復上述分組和排序操作;直至di=1,即所有記錄放進一個組中排序為止。

  例如,假設有這樣一組數[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],如果我們以步長為5開始進行排序,我們可以通過將這列表放在有5列的表中來更好地描述算法,這樣他們就應該看起來是這樣:

13 14 94 33 82?
25 59 94 65 23?
45 27 73 25 39?
10

然后我們對每列進行排序:

10 14 73 25 23?
13 27 94 33 39?
25 59 94 65 82?
45

  將上述四行數字,依序接在一起時我們得到:[ 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 ].這時10已經移至正確位置了,然后再以3為步長進行排序:

10 14 73?
25 23 13?
27 94 33?
39 25 59?
94 65 82?
45

排序之后變為:

10 14 13?
25 23 33?
27 25 59?
39 65 73?
45 94 82?
94

最后以1步長進行排序(此時就是簡單的插入排序了)。

實現效率

  希爾排序是一個不穩定的排序,其時間復雜度受步長(增量)的影響。

  空間復雜度: O(1)

  時間復雜度: 平均 O(n^1.3)?
最好 O(n)?
最壞 O(n^2)

Java實現

public static void shellSort(int[] a) {int gap = 1, i, j, len = a.length;int temp;//插入排序交換值的暫存//確定初始步長while (gap < len / 3){gap = gap * 3 + 1;}for (; gap > 0; gap /= 3){//循環遍歷步長,最后必為1for (i = gap; i < len; i++) {//每一列依次向前做插入排序temp = a[i];//每一列中在a[i]上面且比a[i]大的元素依次向下移動for (j = i - gap; j >= 0 && a[j] > temp; j -= gap){a[j + gap] = a[j];}//a[i]填補空白,完成一列中的依次插入排序a[j + gap] = temp;}} }

版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!

http://blog.csdn.net/amazing7/article/details/51386145

總結

以上是生活随笔為你收集整理的[数据结构] 希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。