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; ++i) {
 5             for (int j = 0; j < arr.count -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
原文地址:https://www.cnblogs.com/guohai-stronger/p/8259391.html