美文网首页
冒泡排序 OC 和swift

冒泡排序 OC 和swift

作者: vvkeep | 来源:发表于2016-06-30 20:44 被阅读217次

    用了oc 和swift 两个版本思想都是一些样的,同时结合了block 和闭包的概念。

    OC版本:

    import "ViewController.h"

    @interface ViewController ()

    @end

    typedef BOOL (^Sort)(int x, int y);
    @implementation ViewController

    • (void)viewDidLoad {
      [super viewDidLoad];
      //定义一个数组,注:数组里面要放对象类型
      NSArray *arr =@[@(1),@(4),@(3),@(9),@(7)];
      //转为可变数组
      NSMutableArray *arr1 = [NSMutableArray arrayWithArray:arr];
      [self bubbleSort:arr1 andSort:^BOOL(int x, int y) {
      return x<y;
      }];

      NSLog(@"%@",arr1);
      }

    -(void)bubbleSort:(NSMutableArray *)arr andSort:(Sort)sort{
    //外面的循环是控制一共循环多少次
    for (int i = 0; i<arr.count-1; i++) {
    //每一次循环 依次把大值放到后面
    for (int j =0; j<arr.count-i-1; j++) {
    NSNumber *i1 = arr[j];
    NSNumber *i2 = arr[j+1];
    //因为是对象类型,所以要转为int进行比较
    if (sort(i1.intValue,i2.intValue)) {
    NSNumber *temp =arr[j+1];
    arr[j+1]= arr[j];
    arr[j] = temp;
    }
    }
    }
    }

    swift版本:
    swift 版本 结合了闭包,这样就可以更加方便的定义是升序,还降序了。
    func bubbleSort (inout data : [Int],function : (Int,Int) -> Bool) {

    for var i = 0; i < data.count - 1; i++ {
     
        for var j = 0 ; j < data.count - 1 - i; j++ {
        
            if(function(data[j],data[j+1])) {
            
                let temp = data[j+1]
                data[j+1] = data[j]
                data[j] = temp             
            
            }
            
        }
        
    }
    

    }

    var arr = [1, 8, 9, 63,3]

    bubbleSort(&arr) { (a, b) -> Bool in
    return a > b
    }

    相关文章

      网友评论

          本文标题:冒泡排序 OC 和swift

          本文链接:https://www.haomeiwen.com/subject/rulfjttx.html