交換類排序:氣泡排序、快速排序
插入類排序:直接插入排序、希爾排序
選擇類排序:簡單選擇排序、堆排序
時間複雜度:最好(有序情況下)o(n),平均(逆序情況下)o(n^2)
空間複雜度:o(1)
演算法思想:(從小到大,從前往後)
第乙個記錄和第二個記錄比較,如果第乙個大,則二者交換,否則不交換;然後第二個記錄和第三個記錄比較,如果第二大,則二者交換,否則不交換……
**:(這裡是建立了nsmutablearray的分類,下同)
#import "nsmutablearray+sort.h"
@implementation
nsmutablearray (sort)
/** 氣泡排序
* isasc yes 表示公升序(下同)
*/- (void)sortedarraywithbubleasc:(bool)isasc
}if (!flag)
}}/** 交換2個值 */
- (void)swapindex1:(nsinteger)index1 index2:(nsinteger)index2
@end
時間複雜度:最好(越接近無序,演算法越高效)o(n),最壞(越接近有序,演算法越低效)o(n^2),平均o(nlogn)
空間複雜度:o(logn)
**:
/** 快速排序 */
- (void)sortedarraywithquicklow:(nsinteger)low high:(nsinteger)high asc:(bool)isasc
while (i < j && ((self[i] < temp && isasc) || (self[i] > temp && !isasc))) ++i;
if(iself[j] = self[i]; --j;}
}self[i] = temp;
[self sortedarraywithquicklow:0 high:i-1 asc:isasc];
[self sortedarraywithquicklow:i+1 high:high asc:isasc];}}
時間複雜度:o(nlogn)(最好,最壞都是這個)
空間複雜度:o(1)
可以把堆看為一顆完全二叉樹,若父親結點大於孩子結點,則這樣的堆叫做大頂堆;若父親結點小於孩子結點的值,則這樣的堆叫做小頂堆。
/** 堆排序 */
- (void)sortedwithheap:(bool)isasc
for (nsinteger i = self
.count - 1; i>=1; --i)
}- (void)siftwithlow:(nsinteger)low high:(nsinteger)high asc:(bool)isasc
}
時間複雜度:o(n^2 )
空間複雜度:o(1)
思想:從頭至尾順序掃瞄序列,找出最小的乙個記錄,和第乙個記錄交換,接著從剩下的記錄中繼續這種選擇和交換,最終使序列有序。
/** 簡單選擇排序 */
- (void)sortedwithselect:(bool)isasc
}[self swapindex1:i index2:k];}}
時間複雜度: o(n^2)
空間複雜度:o(1)
穩定性:穩定
**:
/** 直接插入排序 */
- (void)sortedwithinsert:(bool)isasc
self[j+1] = temp;}}
時間複雜度:平均o(nlogn)
空間複雜度:o(1)
穩定性:不穩定
/** 希爾排序 */
- (void)sortedwithshellstep:(int)step asc:(bool)isasc
self[j+step] = temp;}}
時間複雜度:「快些以nlogn的速度歸隊」(快:快速排序,些:希爾排序,歸:歸併排序,隊:堆排序)
空間複雜度:快速排序為o(logn),其他的都是o(1)
穩定性:「心情不穩定,快些選一堆好友聊天」(快:快速排序,些:希爾排序,選:直接選擇排序,堆:堆排序)
完整的demo見:github位址
常用的演算法排序問題 OC
oc 中常用的一些排序 nsarray arr 1 2 5 3 6 9 5 nsmutablearray oldarr nsmutablearray arraywitharray arr nslog oldarr self bubblesort oldarr self selectionsort o...
排序演算法 選擇排序演算法實現
1 時間複雜度 o n 2 2 選擇排序主要操作是交換和比較 交換次數在0 n 1 總比較次數 n n 1 n 2 n 3 1 n n 1 2 因為交換需要的cpu時間 比較需要的cpu時間 當n比較少時,選擇比冒泡快,減少了不必要的交換,每次交換僅僅是最大值或者最小值與序列起始位置進行狡猾。3 演...
OC排序總結
一般排序 nsarray array1 nsarray arraywithobjects 11 2 13 19 21 7 nil nsarray array2 array1 sortedarrayusingselector selector comparenumber 如果要比較數字的話就要給nss...