最近重新翻看冒泡与选择排序,写下来与大家分享!
冒泡排序:效率较低。
- (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);
}