Hark的数据结构与算法练习之希尔排序
生活随笔
收集整理的這篇文章主要介紹了
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的数据结构与算法练习之希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 影院平台搭建 - (6)一个靠谱的视频播
- 下一篇: 电影推荐系统