iOS 中的選擇、冒泡、插入排序

1.插入排序

分析:插入排序是將一個元素插入到已排序好的有序表中,從而得到一個新的記錄數增加1的新的有序表,執行過程一次選出第i個元素插入到前i-1個有序元素的合適位置

代碼執行過程:

排序過程

調試結果:

執行結果

時間復雜度問題:

? ? ? ? 如果目標是把n個元素的序列升序排列,那么采用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那么此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序算法的時間復雜度為O(n^2)。因而,插入排序不適合對于數據量比較大的排序應用。但是,如果需要排序的數據量很小,例如,量級小于千,那么插入排序還是一個不錯的選擇。

2.冒泡排序

分析:每趟排序過程中需要通過比較找到為排序元素中最大的元素,所以我們需要一個外部循環,從數組其實開始,一次比較相鄰的兩個元素并把較大的放在右邊,保證排序的順序從小到大。

代碼執行過程:

代碼執行過程

調試結果與上邊類似。

時間復雜度問題:

3.插入排序

分析:每趟從排序的元素中找到最小的一次放到左邊,執行完一趟剛好排出正確的順序

排序過程

調試結果與上邊類似。

時間復雜度:

選擇排序的時間復雜度不像前面幾種排序方法那樣,前面幾種排序方法的時間復雜度不是一眼就能看出來的,而是要通過推導計算才能得到的。一般會涉及到遞歸和完全二叉樹,所以推導也不是那么容易。但是選擇排序就不一樣了,你可以很直觀的看出選擇排序的時間復雜度:就是兩個循環消耗的時間;

比較時間:T = (n-1))+ (n -2)+(n - 3).... + 1;? ===>>? T =? [n*(n-1) ] / 2;

交換時間:最好的情況全部元素已經有序,則 交換次數為0;最差的情況,全部元素逆序,就要交換 n-1 次;

所以最優的時間復雜度? 和最差的時間復雜度? 和平均時間復雜度? 都為 :O(n^2)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,223評論 0 52
  • 一、 單項選擇題(共71題) 對n個元素的序列進行冒泡排序時,最少的比較次數是( )。A. n ...
    貝影閱讀 9,259評論 0 10
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,747評論 0 15