冒泡排序
- (void)bubbleSort {
NSArray* nums =@[@(8),@(3),@(4),@(6),@(9),@(7),@(5),@(2),@(1)];
NSMutableArray* result = [numsmutableCopy];
for(inti =0; i < [resultcount]; i++) {
//我们每次都找到一个最大的数,每次都可以少比较一次。
for(intj =0; j < [resultcount] -1- i; j++) {
NSIntegerleft = [result[j]integerValue];
NSIntegerright = [result[j +1]integerValue];
if(left > right) {
[resultexchangeObjectAtIndex:jwithObjectAtIndex:j +1];
}
}
}
NSLog(@"%@", result);
系统提供的排序API
//people对象,有age属性,按照age排序。
NSArray* result1 = [numssortedArrayUsingComparator:^NSComparisonResult(NSNumber* obj1,NSNumber* obj2) {
//obj1 ojb2数组中相邻的两个元素
NSIntegerleft = [obj1integerValue];
NSIntegerright = [obj2integerValue];
if(left < right) {
//NSOrderedAscending,不需要交换位置。
returnNSOrderedAscending;
}else{
//NSOrderedDescending,需要交换位置。
returnNSOrderedDescending;
}
}];
NSLog(@"%@", result1);
二分法
- (void)binarySearch {
NSMutableArray* nums = [[NSMutableArrayalloc]initWithCapacity:0];
[numsaddObject:@(10)];
for(inti =1; i <10000; i++) {
[numsaddObject:@([nums[i -1]integerValue] +arc4random() %10)];
}
//42075
//对于没有循环次数限制,只有跳出循环的条件,我们用while循环。
NSIntegernum =arc4random() %10000;
//需要找的数
NSIntegeri = [nums[num]integerValue];
//需要找的数的索引
NSIntegerindex = -1;
CFTimeIntervaltime1 =CACurrentMediaTime();
//左边端点的索引
NSIntegerleft =0;
//右边端点的索引
NSIntegerright = [numscount] -1;
//中间点的索引
NSIntegermid = [numscount] /2;
while(YES) {
//先和两个端点进行比较
if([nums[left]integerValue] == i) {
//左边=i
index = left;
//跳出循环
break;
}elseif([nums[right]integerValue] == i) {
//
index = right;
break;
}elseif([nums[mid]integerValue] == i) {
index = mid;
break;
}elseif([nums[mid]integerValue] > i) {
//中间> i
//left已经比较过了,不符合条件。
left = left +1;
//中心点已经比较过了,不符合条件。
right = mid -1;
//
mid = (left + right) /2;
if(left > right) {
//数组中没有符合条件的元素,跳出循环
break;
}
}else{
//中间< i
left = mid +1;
right = right -1;
mid = (left + right) /2;
if(left > right) {
break;
}
}
}
CFTimeIntervaltime2 =CACurrentMediaTime();
//传统的便利方法,通过时间加以比较两者的差距
CFTimeIntervaltime3 =CACurrentMediaTime();
for(intj =0; j < [numscount]; j++) {
NSIntegervalue = [nums[j]integerValue];
if(value == i) {
break;
}
}
CFTimeIntervaltime4 =CACurrentMediaTime();
NSLog(@"%f------%f", time2 - time1, time4 - time3);
NSLog(@"%@------%d------%d", index == -1?@"没有找到":@"找到", index, num);
}
网友评论