程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift編程中完成希爾排序算法的代碼實例

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

編輯:更多關於編程

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)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved