最近重新翻看冒泡與選擇排序,寫下來與大家分享!
冒泡排序:效率較低。
- (void)sortArrayByMaopao:(NSMutableArray *)array{
/*
冒泡排序原理:
1 第一層for循環遍歷趟數,需進行array.count-1趟排序。
2 第二層for循環對每趟數據的相鄰兩個進行處理。只需對每趟前array.count-1-i數據做處理,每趟後面的數據已經處理。
效率:如果n個元素進行比較,需要進行n-1趟;第i趟需要比較n-i次,交換n-i次。
*/
for(int i=0;i<array.count-1;i++){
for(int j=0;j<array.count-1-i;j++){
if(([array[j] compare:array[j+1]]) == NSOrderedDescending){
[array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
NSLog(@"sortingArray%d is %@",i,array);
}
NSLog(@"sortedArray is %@",array);
// /*
// 原理同上。
// c語言交換方式
// */
// for(int i=0;i<array.count-1;i++){
// for(int j=0;j<array.count-1-i;j++){
// if(([array[j] compare:array[j+1]]) == NSOrderedDescending){
// id temp = array[j];
// array[j] = array[j+1];
// array[j+1] = temp;
// }
// }
// NSLog(@"sortingArray%d is %@",i,array);
// }
// NSLog(@"sortedArray is %@",array);
}
選擇排序:效率比冒泡排序高,主要體現在每趟只需進行一次交換。
- (void)sortArrayByXuanze:(NSMutableArray *)array{
/*
選擇排序原理:
1 for 循環遍歷趟數,每趟只取剩餘最小值進行交換。
建一個全局的位置變量p,獲取需要交換的元素位置。
2 for 循環遍歷剩餘元素,獲取最小值的位置p
效率:如果n個元素進行比較,需要進行n-1趟;第i趟需要比較n-i次,交換n-i次。
*/
int p=0;
for(int i=0;i<array.count-1;i++){
p=i;
for(int j=i+1;j<array.count;j++){
if(([array[j] compare:array[p]]) == NSOrderedAscending){
p=j;
}
}
if(p!=i){
[array exchangeObjectAtIndex:p withObjectAtIndex:i];
}
NSLog(@"sortingArray%d is %@",i,array);
}
NSLog(@"sortedArray is %@",array);
}