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

首頁 > 編程 > Swift > 正文

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

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

算法思想
插入排序的方式類似平時打撲克牌的時候排序自己手中的撲克牌。開始時,我們左手中沒有牌,桌上有洗好的撲克牌,我們抓取一張撲克牌并放入左手的正確位置。為了找到一張撲克牌的正確位置,我們從右到左將它與手中的每張牌進行比較,左手上的牌總是排序好的,而這些牌原來都是桌上牌堆中頂部的牌,當我們抓完牌時,左手中的牌自然是有順序的。
之所以叫插入排序,不是為別的,正是因為該算法的核心就是將無序的元素插入排好序的部分。
插入排序的核心思想即在于劃分已排序和未排序,將每個待排序的元素逐個與已排序的元素比較,找出恰當的插入位置,插入元素,循環操作至結束
這里是一張插入排序的使用流程,在寫代碼前先感受一下。

排序算法,Swift,插入排序

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

排序算法,Swift,插入排序

 

實現代碼
1.由小到大排序:

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北流市| 宁津县| 手游| 荃湾区| 萍乡市| 富平县| 新丰县| 岳普湖县| 海林市| 柏乡县| 即墨市| 溆浦县| 周口市| 拉孜县| 乌鲁木齐县| 凌海市| 东阳市| 永清县| 红桥区| 高雄市| 林口县| 敖汉旗| 襄樊市| 成都市| 买车| 汨罗市| 平凉市| 阳城县| 湄潭县| 绿春县| 昌都县| 阿鲁科尔沁旗| 枣强县| 普宁市| 方正县| 中宁县| 中宁县| 桑日县| 盈江县| 巫山县| 定远县|