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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

排序算法 --- 希尔排序

發布時間:2024/7/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法 --- 希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 原理

希爾排序可以看作是對直接插入排序的優化. 直接插入是從前到后遍歷數組, 每一個元素都往前移動到最合適的位置. 而希爾排序是利用間隔對數組進行分組, 然后再對每個小組進行子排序, 直到間隔為1.

2 具體步驟

首先要介紹一下間隔是什么.

間隔:?間隔是確定子分組的依據, 間隔是多少, 就有多少個子分組, 例如:

數組為: 7,3,2,5,8,1,6,9,0,4, 如果此時間隔為3, 那么如果兩個數的間隔為三, 那么二者就為一組, 因為間隔多少就有多少組, 也就是說此時應該有三組, 其索引是:

  • 0, 3, 6, 9
  • 1, 4, 7
  • 2, 5, 8

對應的元素為:

  • 7, 5, 6, 4
  • 3, 8, 9
  • 2, 1, 0

了解了間隔之后, 下面就是希爾排序的具體步驟了(還是以上面的數組為例子).

1. 初始間隔為數組長度的一半(例子中數組長度為10, 初始間隔為5)

2. 把數組按照間隔進行分組, 組數為間隔大小(例中此時間隔為5, 那也就是第0, 5 一組, 1,6一組, 2, 7一組, 3, 8一組, 4, 9一組)

3. 對每個小組進行插入排序

4. 間隔除以2, 如果>0, 重復第二步.

代碼:

vector<int> sortArray(vector<int>& nums) {int n = nums.size();int gap = n / 2;while (gap) {for (int i = 0; i < gap; i ++) {for (int cur_i = i + gap; cur_i < n; cur_i += gap) {for (int ii = cur_i; ii >= gap && nums[ii] < nums[ii - gap]; ii -= gap) {swap(nums[ii], nums[ii - gap]);}}}gap /= 2;}return nums; }

總結

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

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