簡單理解插入排序算法及Swift版的代碼示例
算法思想
插入排序的方式類似平時(shí)打撲克牌的時(shí)候排序自己手中的撲克牌。開始時(shí),我們左手中沒有牌,桌上有洗好的撲克牌,我們抓取一張撲克牌并放入左手的正確位置。為了找到一張撲克牌的正確位置,我們從右到左將它與手中的每張牌進(jìn)行比較,左手上的牌總是排序好的,而這些牌原來都是桌上牌堆中頂部的牌,當(dāng)我們抓完牌時(shí),左手中的牌自然是有順序的。
之所以叫插入排序,不是為別的,正是因?yàn)樵撍惴ǖ暮诵木褪菍o序的元素插入排好序的部分。
插入排序的核心思想即在于劃分已排序和未排序,將每個(gè)待排序的元素逐個(gè)與已排序的元素比較,找出恰當(dāng)?shù)牟迦胛恢?,插入元素,循環(huán)操作至結(jié)束
這里是一張插入排序的使用流程,在寫代碼前先感受一下。
我們以一維數(shù)組作為待排序的數(shù)據(jù)源,整個(gè)數(shù)組的以第一個(gè)待排序的元素為分水嶺,前半部分為已排好序的,后半部分是等待排序的; 開始排序時(shí),從第二個(gè)元素開始循環(huán)開始,由于需要記錄當(dāng)前待排序的元素,我們引入一個(gè)變量記錄分水嶺的下標(biāo),也就是下面源碼內(nèi)的變量i; 比較的過程比較直接,從分水嶺往前,逐一比較值的大小,沒找到需要插入的位置時(shí)向后移動(dòng)元素,知道找到位置插入元素;
實(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ù)類型的匹配判斷,十分強(qiáng)大,需要的朋友可以參考下2016-04-04如何使用Swift來實(shí)現(xiàn)一個(gè)命令行工具的方法
這篇文章主要介紹了如何使用Swift來實(shí)現(xiàn)一個(gè)命令行工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法
這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03Swift操作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-04Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)
這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解
這篇文章主要介紹了Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解,使用WKWebView便等于使用和Safari中相同的JavaScript解釋器,用來替代過去的UIWebView,需要的朋友可以參考下2016-04-04