iOS程序員也要學點算法吧-簡單排序之插入排序

進入到簡單排序的第三個排序,插入排序春弥。其實插入排序呛哟,和冒泡,還有選擇排序都是比較排序算法的一種匿沛,比較效率基本也是O(N2) 但是插入排序扫责,效率基本比冒泡快一倍,選擇快一點逃呼。
有一個已經(jīng)有序的數(shù)據(jù)序列鳖孤,要求在這個已經(jīng)排好的數(shù)據(jù)序列中插入一個數(shù),但要求插入后此數(shù)據(jù)序列仍然有序,插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中抡笼,從而得到一個新的苏揣、個數(shù)加一的有序數(shù)據(jù)的數(shù)組,*這里我們可以認為剛開始這個有序數(shù)組其實是為空推姻,那么我們排序就是全排序了*
插入排序的基本思想是:每步將一個待排序的紀錄平匈,按其關鍵碼值的大小插入前面已經(jīng)排序的文件中適當位置上,直到全部插入完為止藏古。

可能不太好理解增炭,我們來看幾個圖

這只是排序的中間狀態(tài),我們可以假定剛開始數(shù)組有序的部分為空

Paste_Image.png

Paste_Image.png
2.gif

代碼如下

//: MARK - 3 插入排序
func insertionSort<T:Comparable>(aArr:[T]) -> [T] {
    var arr = aArr
    for outerIndex in 1..<arr.count { //  在插入排序中OuterIndex左側是有序的 拧晕, 右側無需弟跑,依次判斷 并且向右移動給給被標記變量留出位置
       let temp = arr[outerIndex] // 標記每次需要被插入的數(shù)據(jù)
       var innerIndex = outerIndex
    
    while innerIndex > 0 && arr[innerIndex - 1 ] >= temp  { // innerIndex , 遍歷到最左端也就是0結束,或者是遍歷到小于被標記值
            arr[innerIndex] = arr[innerIndex - 1 ]
            innerIndex -= 1 ; // copy 操作
     }
    arr[innerIndex] = temp // 插入被標記值
    
}


return arr

}

   print(insertionSort([9,8,7,6,5,4,3,2,1,0]))

 // 選法的比較效率 O(N2/4) 比冒泡快一倍防症,比選擇快一點

  //對于 基本有序的序列孟辑,由于while循環(huán)總是為假,算法的效率基本達到O(N2) 對于逆序由于復制太多并沒有冒泡快
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔫敲,一起剝皮案震驚了整個濱河市饲嗽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奈嘿,老刑警劉巖貌虾,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異裙犹,居然都是意外死亡尽狠,警方通過查閱死者的電腦和手機衔憨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袄膏,“玉大人践图,你說我怎么就攤上這事〕凉荩” “怎么了码党?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斥黑。 經(jīng)常有香客問我揖盘,道長,這世上最難降的妖魔是什么锌奴? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任兽狭,我火速辦了婚禮,結果婚禮上鹿蜀,老公的妹妹穿的比我還像新娘箕慧。我一直安慰自己,他們只是感情好耻姥,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布销钝。 她就那樣靜靜地躺著,像睡著了一般琐簇。 火紅的嫁衣襯著肌膚如雪蒸健。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天婉商,我揣著相機與錄音似忧,去河邊找鬼。 笑死丈秩,一個胖子當著我的面吹牛盯捌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蘑秽,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼饺著,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肠牲?” 一聲冷哼從身側響起幼衰,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缀雳,沒想到半個月后渡嚣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年识椰,在試婚紗的時候發(fā)現(xiàn)自己被綠了绝葡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡腹鹉,死狀恐怖藏畅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情种蘸,我是刑警寧澤墓赴,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布竞膳,位于F島的核電站航瞭,受9級特大地震影響,放射性物質發(fā)生泄漏坦辟。R本人自食惡果不足惜刊侯,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锉走。 院中可真熱鬧滨彻,春花似錦、人聲如沸挪蹭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梁厉。三九已至辜羊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間词顾,已是汗流浹背八秃。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肉盹,地道東北人昔驱。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像上忍,于是被迫代替她去往敵國和親骤肛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 來自微信公眾號:開點工作室(ID:kaidiancs) 排序是根據(jù)某種標準將一組記錄重排的過程窍蓝,是最常見的計算任務...
    開點工作室閱讀 2,064評論 0 8
  • 概述 排序有內(nèi)部排序和外部排序腋颠,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大它抱,一次不能容納全部...
    蟻前閱讀 5,170評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序秕豫,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,729評論 0 15
  • 排序的基本概念 在計算機程序開發(fā)過程中混移,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個關鍵字進行排序祠墅,排序完成的序列可用于快...
    Jack921閱讀 1,421評論 1 4
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序歌径,而外部排序是因排序的數(shù)據(jù)很大毁嗦,一次不能容納全部的...
    Luc_閱讀 2,259評論 0 35