用了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
}