iOS - 插入排序

Demo_github

圖片源于網(wǎng)絡

插入排序

插入排序法(Inser Sort)是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中昌妹,從而得到一個新的捶枢、個數(shù)加一的有序數(shù)據(jù)握截,算法適用于少量數(shù)據(jù)的排序。

算法思想

  • 從第一個元素開始烂叔,認為該元素已經(jīng)是排好序的谨胞。

  • 取下一個元素,在已經(jīng)排好序的元素序列中從后向前掃描蒜鸡。

  • 如果已經(jīng)排好序的序列中元素大于新元素畜眨,則將該元素往右移動一個位置。

  • 重復上一步驟术瓮,直到已排好序的元素小于或等于新元素康聂。

  • 在當前位置插入新元素。

  • 重復"取下一個元素胞四,在已經(jīng)排好序的元素序列中從后向前掃描"過程恬汁。

圖-直接插入排序示例圖

范例代碼

/**
 插入排序

 @param array 需要排序的Array
 */
+ (void)inserSort:(NSMutableArray *)array{
    //插入排序的原理:始終定義第一個元素為有序的,將元素逐個插入到有序排列之中辜伟,其特點是要不斷的
    
    //移動數(shù)據(jù)氓侧,空出一個適當?shù)奈恢茫汛迦氲脑胤诺嚼锩嫒ァ?    for (int i = 0; i < array.count; i++) {
        
        NSNumber *temp = array[i];
        //temp 為待排元素 i為其位置 j為已排元素最后一個元素的位置(即取下一個元素导狡,在已經(jīng)排好序的元素序列中從后向前掃描)
        
        int j = i-1;

        //當j < 0 時约巷, i 為第一個元素 該元素認為已經(jīng)是排好序的 所以不進入while循環(huán)
        //  [array[j] compare:temp] == NSOrderedDescending與[array[j] intValue] > [temp intValue] 作用相同
        while (j >= 0 && [array[j] compare:temp] == NSOrderedDescending) {
            //如果已經(jīng)排好序的序列中元素大于新元素,則將該元素往右移動一個位置
            [array replaceObjectAtIndex:j+1 withObject:array[j]];
            j--;
        }
        //跳出while循環(huán)時旱捧,j的元素小于或等于i的元素(待排元素)独郎。插入新元素 i= j+1
        [array replaceObjectAtIndex:j+1 withObject:temp];
        NSLog(@"插入排序排序中:%@",array);
    }
}

算法分析

  • 直接插入排序的算法性能
直接插入排序的算法性能
  • 時間復雜度

    當元素的初始序列為正序時,僅外循環(huán)要進行n-1趟排序且每一趟只進行一次比較枚赡,沒有進入if語句不存在元素之間的交換(移動)氓癌。此時比較次數(shù)(Cmin)和移動次數(shù)(Mmin)達到最小值。 此時時間復雜度為O(n)贫橙。

    Cmin = n-1;
    Mmin = 0;
    

    當元素的初始序列為反序時贪婉,每趟排序中待插入的元素都要和[0,i-1]中的i個元素進行比較且要將這i個元素后移(arr[j+1] = arr[j]),i個元素后移移動次數(shù)當然也就為i了卢肃,再加上temp = arr[i]與arr[j+1] = temp的兩次移動疲迂,每趟移動的次數(shù)為i+2,此時比較次數(shù)(Cmin)和移動次數(shù)(Mmin)達到最小值。 此時時間復雜度為O(n2)莫湘。

    Cmax = 1+2+...+(n-1) = n*(n-1)/2 = O(n2)
    Mmax = (1+2)+(2+2)+...+(n-1+2) = (n-1)*(n+4)/2 = O(n2)  (i取值范圍1~n-1)
    

    數(shù)據(jù)越接近正序尤蒿,直接插入排序的算法性能越好。

  • 空間復雜度

    由直接插入排序算法可知逊脯,我們在排序過程中优质,需要一個臨時變量存儲要插入的值竣贪,所以空間復雜度為 O(1) 军洼。

  • 算法穩(wěn)定性
    直接插入排序的過程中巩螃,不需要改變相等數(shù)值元素的位置,所以它是穩(wěn)定的算法匕争。

插入排序和選擇排序的區(qū)別

插入排序和選擇排序都有兩層循環(huán)避乏,外循環(huán)遍歷整個數(shù)組,內(nèi)循環(huán)稍有區(qū)別:

  • 選擇排序的內(nèi)循環(huán)是遍歷一組未排過序的數(shù)組甘桑。

  • 插入排序的內(nèi)循環(huán)是遍歷一組已排過序的數(shù)組拍皮。

參考

排序三 直接插入排序

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跑杭,隨后出現(xiàn)的幾起案子铆帽,更是在濱河造成了極大的恐慌,老刑警劉巖德谅,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爹橱,死亡現(xiàn)場離奇詭異,居然都是意外死亡窄做,警方通過查閱死者的電腦和手機愧驱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椭盏,“玉大人组砚,你說我怎么就攤上這事√图眨” “怎么了糟红?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乌叶。 經(jīng)常有香客問我改化,道長,這世上最難降的妖魔是什么枉昏? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任陈肛,我火速辦了婚禮,結(jié)果婚禮上兄裂,老公的妹妹穿的比我還像新娘句旱。我一直安慰自己,他們只是感情好晰奖,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布谈撒。 她就那樣靜靜地躺著,像睡著了一般匾南。 火紅的嫁衣襯著肌膚如雪啃匿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音溯乒,去河邊找鬼夹厌。 笑死,一個胖子當著我的面吹牛裆悄,可吹牛的內(nèi)容都是我干的矛纹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼光稼,長吁一口氣:“原來是場噩夢啊……” “哼或南!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起艾君,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤采够,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冰垄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吁恍,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年播演,在試婚紗的時候發(fā)現(xiàn)自己被綠了冀瓦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡写烤,死狀恐怖翼闽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洲炊,我是刑警寧澤感局,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站暂衡,受9級特大地震影響询微,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狂巢,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一撑毛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唧领,春花似錦藻雌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至受啥,卻和暖如春做个,著一層夾襖步出監(jiān)牢的瞬間鸽心,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工居暖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顽频,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓膝但,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谤草。 傳聞我的和親對象是個殘疾皇子跟束,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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