簡略懂得拔出排序算法及Swift版的代碼示例。本站提示廣大學習愛好者:(簡略懂得拔出排序算法及Swift版的代碼示例)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略懂得拔出排序算法及Swift版的代碼示例正文
算法思惟
拔出排序的方法相似日常平凡打撲克牌的時刻排序本身手中的撲克牌。開端時,我們左手中沒有牌,桌上有洗好的撲克牌,我們抓取一張撲克牌並放入左手的准確地位。為了找到一張撲克牌的准確地位,我們從右到左將它與手中的每張牌停止比擬,左手上的牌老是排序好的,而這些牌本來都是桌上牌堆中頂部的牌,當我們抓完牌時,左手中的牌天然是有次序的。
之所以叫拔出排序,不是為其余,恰是由於該算法的焦點就是將無序的元素拔出排好序的部門。
拔出排序的焦點思惟即在於劃分已排序和未排序,將每一個待排序的元素逐一與已排序的元素比擬,找出適當的拔出地位,拔出元素,輪回操作至停止
這裡是一張拔出排序的應用流程,在寫代碼前先感觸感染一下。
我們以一維數組作為待排序的數據源,全部數組的以第一個待排序的元素為分水嶺,前半部門為已排好序的,後半部門是期待排序的; 開端排序時,從第二個元素開端輪回開端,因為須要記載以後待排序的元素,我們引入一個變量記載分水嶺的下標,也就是上面源碼內的變量i; 比擬的進程比擬直接,從分水嶺往前,一一比擬值的年夜小,沒找到須要拔出的地位時向後挪動元素,曉得找到地位拔出元素;
完成代碼
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 }