日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hark的数据结构与算法练习之希尔排序

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hark的数据结构与算法练习之希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法說明

希爾排序是插入排序的優化版。

插入排序的最壞時間復雜度是O(n2),但如果要排序的數組是一個幾乎有序的數列,那么會降低有效的減低時間復雜度。

希爾排序的目的就是通過一個increment(增量)來對數列分組進行交換排序,最終使數列幾乎有序,最后再執行插入排序,統計出結果。

通過increment=n/2, 也就是如果9個數的話,增量為4,2,1。 ? 如果是20個數的話,增量就是10,5,2,1。 ?當increment為1時,其實對幾乎有序的數列進行插入排序啦啦。

?

?

?

時間復雜度

O(n2/3)

?

空間復雜度

O(1)

?

代碼

使用的是Java

/** 希爾排序*/ public class ShellSort {public static void main(String[] args) {int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 };ShellSortMethod(arrayData);for (int integer : arrayData) {System.out.print(integer);System.out.print(" ");}}public static void ShellSortMethod(int[] arrayData) {int i, j, temp = 0;int increment = arrayData.length;do {increment = increment / 2; //增量for (i = increment; i < arrayData.length; i++) {if (arrayData[i] > arrayData[i - increment]) { //判斷是否要進行插入排序temp = arrayData[i]; //將要插入的值存放在臨時變量中//這里其實做的就是插入排序,將以增量為步長,往后移動。 //temp > arrayData[j] 這個是要注意的,只會移動比要插入的值小的數字for (j = i - increment; j >= 0 && temp > arrayData[j]; j -= increment) {arrayData[j + increment] = arrayData[j];}arrayData[j + increment] = temp;}}} while (increment > 0);} }

  

 

結果

9 8 7 6 5 4 3 2 1

?

總結

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

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