iOS 冒泡排序
一 冒泡排序
1 将前后每两个数进行比较,较大的数往后排,一轮下来最大的数就排到最后去了。然后再进行第二轮比较,第二大的数也排到倒数第二了,以此类推
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 NSMutableArray *arr = [NSMutableArray arrayWithObjects:@1,@5,@2,@4,@3, nil]; 4 for (int i = 0; i < arr.count - 1; ++i) { 5 for (int j = 0; j < arr.count - i - 1; ++j) { 6 if (arr[j] > arr[j+1]) { 7 [arr exchangeObjectAtIndex:j withObjectAtIndex:j+1]; 8 } 9 } 10 } 11 NSLog(@"最终结果:%@",arr); 12 } 13 return 0; 14 }
运行结果:
1 2018-01-10 17:53:54.754684+0800 算法[2824:551256] 最终结果:( 2 1, 3 2, 4 3, 5 4, 6 5 7 )
2.冒泡改进:
里面一层循环在某次扫描中没有执行交换,则说明此时数组已经全部有序列,无需在扫描了。因此,增加一个标记,每次发生交换,就标记,如果某次循环没有标记,则说明已经完成排序。
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 NSMutableArray *arr = [NSMutableArray arrayWithObjects:@1,@5,@2,@4,@3, nil]; 4 BOOL isSort = true; 5 for (int i = 0; i < arr.count; i ++) { 6 isSort = false; 7 for (int j = 0; j < arr.count - i - 1;j ++ ) { 8 if (arr[j] > arr[j+1]) { 9 [arr exchangeObjectAtIndex:j withObjectAtIndex:j+1]; 10 isSort = YES; 11 } 12 } 13 if (!isSort) { 14 break; 15 } 16 } 17 NSLog(@"最终结果:%@",arr); 18 } 19 return 0; 20 }
运行结果:
2018-01-11 10:21:14.046746+0800 算法[1372:73546] 最终结果:( 1, 2, 3, 4, 5 ) Program ended with exit code: 0