美文网首页
冒泡排序 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