Swift編程中完成希爾排序算法的代碼實例。本站提示廣大學習愛好者:(Swift編程中完成希爾排序算法的代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift編程中完成希爾排序算法的代碼實例正文
思想
希爾排序的本質就是分組拔出排序,該辦法又稱減少增量排序,因DL.Shell於1959年提出而得名。
該辦法的根本思想是:先將整個待排元素序列聯系成若干個子序列(由相隔某個“增量”的元素組成的)辨別停止直接拔出排序,然後順次縮減增量再停止排序,待整個序列中的元素根本有序(增量足夠小)時,再對全體元素停止一次直接拔出排序。由於直接拔出排序在元素根本有序的狀況下(接近最好狀況),效率是很高的,因而希爾排序在時間效率上比前兩種辦法有較大進步。
以n=10的一個數組49, 38, 65, 97, 26, 13, 27, 49, 55, 4為例:
第一次 gap = 10 / 2 = 5
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
排序後
第三次 gap = 2 / 2 = 1
第四次 gap = 1 / 2 = 0 排序完成失掉數組:
完成代碼:
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)