iOS選擇排序

2021-09-26 05:28:52 字數 1112 閱讀 3907

選擇排序是不穩定的排序方法。

時間複雜度

選擇排序的交換操作介於 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介於 0 和 3 (n - 1) 次之間。

比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+…+1=n*(n-1)/2。交換次數o(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快.

其他排序演算法的複雜度如右圖所示。

穩定性

選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定的排序演算法.

解釋很清楚了,下面我們看看**

nsmutablearray *arr = [nsmutablearray arraywitharray:@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10"]];

int index = 0;//記錄找到的關鍵字下標

for (int i = 0; i < arr.count - 1; i++)

}if (i != index)

nslog(@"%@",arr);

}

上面陣列為逆序,交換次數為count/2=5次;最好情況是順序排列,交換0次,最差為count-1次,例如陣列@[@「5」,@「6」,@「7」,@「9」,@「1」,@「2」,@「3」,@「8」,@「4」,@「10」]從大到小排序需要交換9次.

ios 演算法值選擇排序

選擇排序 selection sort 是一種簡單直觀的排序演算法。工作原理 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定的排序...

IOS演算法 二 之選擇排序

選擇排序 每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的最後。直到所有待排序的資料元素排完。選擇排序 是不穩定的排序方法。選擇排序 比方在乙個長度為n的無序陣列中。在第一趟遍歷n個資料,找出當中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出當中最...

排序 選擇排序 選擇排序 堆排序

寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...