欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單理解插入排序算法及Swift版的代碼示例

 更新時(shí)間:2016年07月06日 11:11:36   作者:yoyo  
插入排序算法可以在已排序的序列中將要插入的元素和原有元素保持有序,這里我們來簡單理解插入排序算法及Swift版的代碼示例,需要的朋友可以參考下

算法思想
插入排序的方式類似平時(shí)打撲克牌的時(shí)候排序自己手中的撲克牌。開始時(shí),我們左手中沒有牌,桌上有洗好的撲克牌,我們抓取一張撲克牌并放入左手的正確位置。為了找到一張撲克牌的正確位置,我們從右到左將它與手中的每張牌進(jìn)行比較,左手上的牌總是排序好的,而這些牌原來都是桌上牌堆中頂部的牌,當(dāng)我們抓完牌時(shí),左手中的牌自然是有順序的。
之所以叫插入排序,不是為別的,正是因?yàn)樵撍惴ǖ暮诵木褪菍o序的元素插入排好序的部分。
插入排序的核心思想即在于劃分已排序和未排序,將每個(gè)待排序的元素逐個(gè)與已排序的元素比較,找出恰當(dāng)?shù)牟迦胛恢?,插入元素,循環(huán)操作至結(jié)束
這里是一張插入排序的使用流程,在寫代碼前先感受一下。

201676110656609.jpg (735×185)

我們以一維數(shù)組作為待排序的數(shù)據(jù)源,整個(gè)數(shù)組的以第一個(gè)待排序的元素為分水嶺,前半部分為已排好序的,后半部分是等待排序的; 開始排序時(shí),從第二個(gè)元素開始循環(huán)開始,由于需要記錄當(dāng)前待排序的元素,我們引入一個(gè)變量記錄分水嶺的下標(biāo),也就是下面源碼內(nèi)的變量i; 比較的過程比較直接,從分水嶺往前,逐一比較值的大小,沒找到需要插入的位置時(shí)向后移動(dòng)元素,知道找到位置插入元素;

201676110724690.png (507×157)

實(shí)現(xiàn)代碼
1.由小到大排序:

func insertionSortBigger(var array: Array<Int>) -> Array<Int>{
  for(var j = 1 ; j<array.count ; j++){//從第二個(gè)開始向前對比插入
    let key = array[j] //記錄要比較的值
    var i = j-1
    while(i>=0 && array[i]>key){//如果key較小,那么現(xiàn)有的位置向后移,為key空出位置
      array[i+1] = array[i] //移位
      i--
    }
    array[i+1] = key
  }
  return array
}

2.由大到小排序:

func insertionSortSmaller(var array: Array<Int>) -> Array<Int>{
  for(var j = 1 ; j<array.count ; j++){//從第二個(gè)開始向前對比插入
    let key = array[j] //記錄要比較的值
    var i = j-1
    while(i>=0 && array[i]<key){//如果key較大,那么現(xiàn)有的位置向后移,為key空出位置
      array[i+1] = array[i] //移位
      i--
    }
    array[i+1] = key
  }
  return array
}



相關(guān)文章

  • 深入解析Swift中switch語句對case的數(shù)據(jù)類型匹配的支持

    深入解析Swift中switch語句對case的數(shù)據(jù)類型匹配的支持

    這篇文章主要介紹了Swift中switch語句對case的數(shù)據(jù)類型匹配的支持,Swift中switch...case語句支持多種數(shù)據(jù)類型的匹配判斷,十分強(qiáng)大,需要的朋友可以參考下
    2016-04-04
  • 如何使用Swift來實(shí)現(xiàn)一個(gè)命令行工具的方法

    如何使用Swift來實(shí)現(xiàn)一個(gè)命令行工具的方法

    這篇文章主要介紹了如何使用Swift來實(shí)現(xiàn)一個(gè)命令行工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Swift快速集成下拉刷新和上拉加載更多示例代碼

    Swift快速集成下拉刷新和上拉加載更多示例代碼

    這篇文章主要介紹了Swift快速集成下拉刷新和上拉加載更多示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Swift 常量與變量實(shí)例詳解

    Swift 常量與變量實(shí)例詳解

    這篇文章主要介紹了Swift 常量與變量實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Swift操作Quartz 2D進(jìn)行簡單的繪圖與坐標(biāo)變換的教程

    Swift操作Quartz 2D進(jìn)行簡單的繪圖與坐標(biāo)變換的教程

    這篇文章主要介紹了Swift操作Quartz 2D進(jìn)行簡單的繪圖與坐標(biāo)變換的教程,Quartz 2D是Core Graphics框架中的一個(gè)重要組件,經(jīng)常被Mac OS或和iOS開發(fā)者用來繪圖,需要的朋友可以參考下
    2016-04-04
  • Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)

    Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)

    這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift循環(huán)遍歷集合的方法總結(jié)分享

    Swift循環(huán)遍歷集合的方法總結(jié)分享

    SWIFT是蘋果于2014年WWDC發(fā)布的新開發(fā)語言,可與Objective-C*共同運(yùn)行于Mac OS和iOS平臺(tái),用于搭建基于蘋果平臺(tái)的應(yīng)用程序。這篇文章主要給大家總結(jié)介紹了關(guān)于Swift循環(huán)遍歷集合的方法,如for-in循環(huán)、for循環(huán)以及基于塊的遍歷等方法,需要的朋友可以參考下。
    2017-03-03
  • Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解

    Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解

    這篇文章主要介紹了Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解,使用WKWebView便等于使用和Safari中相同的JavaScript解釋器,用來替代過去的UIWebView,需要的朋友可以參考下
    2016-04-04
  • Swift的函數(shù)式編程詳解

    Swift的函數(shù)式編程詳解

    這篇文章主要介紹了Swift的函數(shù)式編程詳解,本文講解了Swift概覽、Swift遞歸、Swift 的高階函數(shù)和閉包等內(nèi)容,需要的朋友可以參考下
    2015-01-01

最新評論