ios開發系列之排序演算法

2021-07-05 12:34:35 字數 2261 閱讀 1197

在說排序前我們先自定義乙個類sort : nsobject

接下來的方法都是此類的類方法,返回的都是乙個可變陣列

氣泡排序是這樣實現的:

1、從列表的第乙個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。

2、重複1號步驟,直至再也不能交換。

氣泡排序的平均時間複雜度與插入排序相同,也是平方級的,但氣泡排序是原地排序的,也就是說它不需要額外的儲存空間

//氣泡排序

+ (nsmutablearray *)maopaosortwitharray:(nsmutablearray *)adata}}

return adata;

}

插入排序是這樣實現的:

1、首先新建乙個空列表,用於儲存已排序的有序數列(我們稱之為」有序列表」)。

2、從原數列中取出乙個數,將其插入」有序列表」中,使其仍舊保持有序狀態。

3、重複2號步驟,直至原數列為空。

插入排序的平均時間複雜度為平方級的,效率不高,但是容易實現。它借助了」逐步擴大成果」的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。

插入排序的基本思想是在遍歷陣列的過程中,假設在序號 i 之前的元素即 [0..i-1] 都已經排好序,本趟需要找到 i 對應的元素 x 的正確位置 k ,並且在尋找這個位置 k 的過程中逐個將比較過的元素往後移一位,為元素 x 「騰位置」,最後將 k 對應的元素值賦為 x ,一般情況下,插入排序的時間複雜度和空間複雜度分別為 o(n2 ) 和 o(1)。

//插入排序

+ (nsmutablearray *)insertsortwitharray:(nsmutablearray *)adata

[adata replaceobjectatindex:j+1 withobject:[nsnumber numberwithint:tmp]];

}return adata;

}

選擇排序是這樣實現的:

1、設陣列內存放了n個待排數字,陣列下標從1開始,到n結束。

2、初始化i=1

3、從陣列的第i個元素開始到第n個元素,尋找最小的元素。

4、將上一步找到的最小元素和第i位元素交換。

5、i++,直到i=n-1演算法結束,否則回到第3步

選擇排序的平均時間複雜度也是o(n^2)的。

舉例:

564

比如說這個,我想讓它從小到大排序,怎麼做呢?

第一步:從第一位開始找最小的元素,564中4最小,與第一位交換。結果為465

第二步:從第二位開始找最小的元素,465中5最小,與第二位交換。結果為456

第三步:i=2,n=3,此時i=n-1,演算法結束

完成

//選擇排序

+ (nsmutablearray *)selectsortwitharray:(nsmutablearray *)adata

}if (m != i )

}return adata;

}

現在開始,我們要接觸高效排序演算法了。實踐證明,快速排序是所有排序演算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序演算法中,演算法的高效與否與列表中數字間的比較次數有直接的關係,而」保證列表的前半部分都小於後半部分」就使得前半部分的任何乙個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查詢資料得另當別論了。

//快速排序

+ (nsmutablearray *)quicksortwitharray:(nsmutablearray *)adata

+ (void)quicksortwitharray:(nsmutablearray *)adata left:(nsinteger)left right:(nsinteger)right

[adata exchangeobjectatindex:i withobjectatindex:j];

}[adata exchangeobjectatindex:left withobjectatindex:j];

[self quicksortwitharray:adata left:left right:j - 1];

[self quicksortwitharray:adata left:j + 1 right:right];

}}

IOS開發系列之Swift UI Lab

import uikit class viewcontroller uiviewcontroller 這裡做個lab宣告 var examplelab uilabel override func viewdidload super.viewdidload 呼叫makeui makeui do any...

iOS開發系列

ios開發系列 ui 自定義tableview 本章實現效果 我們使用mvc架構來實現自定義tableview,具體的mvc介紹請自行,在本章中不作為主要內容講解。model層 datasource.h import inte ce datasource nsobject nsarray getus...

ios演算法之氣泡排序演算法

通過不斷的走訪需要排序的元素,依次比較兩個相鄰的元素。如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。這樣重複的進行直到沒有相鄰元素需要交換,就算元素排序完成。名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端 公升序或降序排列 就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,...