国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

Swift編程中實現希爾排序算法的代碼實例

2020-03-09 17:48:03
字體:
來源:轉載
供稿:網友

思想
希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序,因DL.Shell于1959年提出而得名。
該方法的基本思想是:先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然后依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。
以n=10的一個數組49, 38, 65, 97, 26, 13, 27, 49, 55, 4為例:
第一次 gap = 10 / 2 = 5

Swift,希爾排序,排序算法

1A,1B,2A,2B等為分組標記,數字相同的表示在同一組,大寫字母表示是該組的第幾個元素, 每次對同一組的數據進行直接插入排序。即分成了五組(49, 13) (38, 27) (65, 49)  (97, 55)  (26, 4)這樣每組排序后就變成了(13, 49)  (27, 38)  (49, 65)  (55, 97)  (4, 26),下同。
第二次 gap = 5 / 2 = 2
排序后

Swift,希爾排序,排序算法

第三次 gap = 2 / 2 = 1

Swift,希爾排序,排序算法

第四次 gap = 1 / 2 = 0 排序完成得到數組:

Swift,希爾排序,排序算法

 

實現代碼:
  

 import UIKit   func shellsort(inout a : [Int]){     let n = a.count-1     for(var gap = n / 2; gap > 0; gap /= 2){       for j in gap...n {         if a[j] < a[j-gap]{           let tmep = a[j]           var k = j - gap           while k >= 0 && a[k] > tmep {//掃一遍 好填最小值             a[k + gap] = a[k]             k -= gap           }           a[k + gap] = tmep         }       }     }   }   var a = [2,5,6,7,8,9,0,1,3,4]   shellsort(&a)


注:相關教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 上蔡县| 洞头县| 竹溪县| 图木舒克市| 睢宁县| 三原县| 泉州市| 靖西县| 甘孜县| 安国市| 金坛市| 栾城县| 河北省| 祁连县| 城步| 广南县| 长岛县| 家居| 古丈县| 武宁县| 湟源县| 栾城县| 鄂伦春自治旗| 瑞金市| 红原县| 石河子市| 揭阳市| 海安县| 绿春县| 凤冈县| 聂荣县| 怀集县| 布拖县| 崇仁县| 遂昌县| 北宁市| 库伦旗| 伽师县| 霍山县| 迁安市| 扎赉特旗|