美文网首页
冒泡排序、选择排序和二分法查找

冒泡排序、选择排序和二分法查找

作者: 沐时 | 来源:发表于2022-02-09 10:25 被阅读0次

    冒泡排序

    - (void)bubbleSort {
        NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"98",@"75",@"89",@"53",@"67",@"92"]];
        for (int i = 0; i < array.count - 1; i++) {
            for (int j = 0; j < array.count-1-i; j++) {
                //原理:从第1个数开始起,与后面的数字相互比较,满足条件的向后位移(值交换),若不满足条件,拿到大一点的数值继续向后比较
                if ([array[j] intValue] > [array[j+1] intValue]) {
                    // 开始交换数据
                    NSString *temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
            NSLog(@"%@",array);
        }
    }
    

    选择排序

    // 选择排序
    - (void)selectSort {
        NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"98",@"75",@"89",@"53",@"67",@"92"]];
        for (int i = 0; i < array.count-1; i++) {
            // 原理:从i后面第i+1个数起,跟array[i]相互比较,满足条件即交换值
            for (int j = i+1; j < array.count; j++) {
                // if里面的 '>' '<' 条件决定了排序的 升降
                if ([array[i] intValue] > [array[j] intValue]) {
                    NSString *temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
            NSLog(@"%@",array);
        }
    }
    

    二分法查找

    概念

    1.使用二分法好处: 可以加快寻找的效率。
    2.使用二分法特点: 二分法查找有序数组元素。
    3.使用二分法思路:它是通过与数组的中间值进行比较的。

    
    /**
    1.我们要查找的值为X
    2.数组是从小到大排序的
    **
    1.先取出数组中间的元素
    2.把中间元素和X进行比较,如果中间元素大于X,那么X就位于第一个元素,和中间元素之间。反之,如果中间元素小于X,那么X就位于中间元素和最大值之间。
    3.这样进行比较之后,我们的查找范围就小了一半。
     */
    #pragma mark - 实现代码:
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        NSArray *arr = @[@1,@20,@30,@45,@50,@55,@60,@66,@70];
        NSInteger x = 70,min,max,mid;
        min = 0;
        max = arr.count - 1;
        mid = (min + max) / 2;
        
        for (int i = 0; i < arr.count; i++)
        {
            if ([arr[mid] integerValue] == x)
            {
                NSLog(@"查找次数为--->%d次",i);
                NSLog(@"寻找值位置为--->%ld",mid);
                return;
            }else if ([arr[mid] integerValue] > x)
            {
                max = mid - 1;
                mid = (min + max) / 2;
            }else if ([arr[mid] integerValue] < x)
            {
                min = mid + 1;
                mid = (min + max) / 2;
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:冒泡排序、选择排序和二分法查找

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