美文网首页简单算法
冒泡排序、选择排序、折半查找

冒泡排序、选择排序、折半查找

作者: Persistent丧心病狂 | 来源:发表于2018-12-15 00:02 被阅读3次

简单的算法

选择排序(升序) :第一个依次和第二个、第三个、第四个、、、比较,如果第一个大于(升序)对比的那个,就将俩个数的位置交换,一轮之后,我们得到最小的数字在数组的最左边
然后第二轮从第二个开始依次和第三个、第四个、、、比较,如果大于对比的那个继续交换位置,一直到最后一轮

NSMutableArray *array = [NSMutableArray arrayWithArray:@[@4,@1,@10,@5,@2,@88,@3]];
    for (int i = 0;i < array.count ; i ++) {
        for (int j = 1 + i; j < array.count ; j ++) {
            // 升序
            if ([array[i] integerValue] > [array[j] integerValue]) {
                NSNumber *temp;
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }

冒泡排序(升序):第一轮第一个和第二个比较,如果第一个大于(升序)第二个,就将他俩的位置交换,然后第二个和第三个比较,同样,如果第二个大于第三个,交换他俩位置,一直到倒数第二个和最后一个比较,最后得到数组中最大的一个在最右边
第二轮,还是从第一个开始,第一个与第二个比较,如果大于(升序)第二个,将他俩的位置交换,然后第二个和第三个比较,直到倒数第三个与倒数第二个比较,这一轮得到第二大的数放在邮编的倒数第二个位置、、然后第三轮,一直到最后一轮。

NSMutableArray *array = [NSMutableArray arrayWithArray:@[@4,@1,@10,@5,@2,@88,@3]];
 for (int i = 0;i < array.count ; i ++) {
        for (int j = 0; j < array.count - i - 1 ; j ++) {
           //升序
            if ([array[j] integerValue] > [array[j + 1] integerValue]) {
                NSNumber *temp;
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

C语言

折半查找:在一个有序的数组中 ,找出要查找数的下标

查找对应key的下标,找不到返回-1

//声明 函数
int findUniqueKey(int nums[], int length, int key);
    //创建有序数组
     int nums[] = {1,3,5,7,9};
    //获取到数组长度
    int length = sizeof(nums)/sizeof(nums[0]);
    //要查找的数
    int key = 7;
    //调用
    int result = findInsertIndex(nums, length, key);
    printf("下标为%i\n",result);

查找对应key的下标函数,找不到返回-1

int findUniqueKey(int nums[], int length, int key){
    //每次对比时候最小的数
    int min = 0;
   //每次对比时候最大的数
    int max = length - 1;
   //每次对比时候中间的数
    int mid = (min + max)/2;
    
    while (nums[mid] != key) {
        
        if (key > nums[mid]) {
            min = mid + 1;
       
        } else if (key < nums[mid]) {
            max = mid - 1;
        }
        
        if (min > max) {
            return -1;
        }
        
        mid = (min + max)/2;
    }
    return mid;
}

关于折半查找的面试题:将一个数插入一个有序的数组之后,还保持数组的有序性,求插入的位置(下标)

最后我们要找的是 当条件第一次不符合时候(最小值大于最大值),min的值为我们要求的值

//声明 函数
int findInsertIndex(int nums[], int length, int key);
    //创建有序数组
     int nums[] = {1,3,5,7,9};
    //获取到数组长度
    int length = sizeof(nums)/sizeof(nums[0]);
    //要插入的数
    int key = 6;
    //调用
    int result = findInsertIndex(nums, length, key);
    printf("下标为%i\n",result);
int findInsertIndex(int nums[], int length, int key) {
    
    int min,mid,max;
    min = 0;
    max = length - 1;
    mid = (min + max)/2;
    
    while(min <= max) {
        
        if (key < nums[mid]) {
           
            max = mid - 1;
       
        } else if (key > nums[mid]) {
           
            min = mid + 1;
        }
        
        mid = (min + max)/2;
    }
    
    return min;
    
}

相关文章

  • 冒泡排序,选择排序,折半查找

    选择排序 冒泡排序 折半查找(只适用于已经排好序的数组) swap函数(交换数组中两个数的位置)

  • 冒泡排序、选择排序、折半查找

    简单的算法 选择排序(升序) :第一个依次和第二个、第三个、第四个、、、比较,如果第一个大于(升序)对比的那个,就...

  • 排序算法、链表是否有环、反转、删除结点

    折半查找 冒泡排序 选择排序 插入排序 判断一个链表是否有环 链表反转 链表删除结点方法: 只给定单链表中某个结点...

  • 18-04-27  python3 算法笔记 003查找与排序

    查找: 顺序查找 二分查找 hash查找 排序: 冒泡排序 选择排序 插入排序希尔排序 归并排序 快速...

  • 排序算法

    冒泡排序 快速排序 直接插入排序 折半插入排序 希尔排序 简单选择排序 堆排序 归并排序

  • Java实现常见的算法

    主要罗列了常见的选择排序,冒泡排序和快速排序,还有二分查找的算法。 选择排序 冒泡排序 快速排序 二分查找 注意二...

  • 数据结构和算法-持续更新中...

    栈 二叉树 队列 堆 排序 冒泡排序 归并排序 先分割一个再按照大小有序合并 基数排序 查找 二分查找(折半查找)...

  • Java排序算法

    插入排序 直接插入排序 折半插入排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 其他排序 二路...

  • 算法入门——冒泡排序、选择排序

    上篇文章学习了算法入门——顺序查找、二分查找,这篇文章我们学习算法入门——冒泡排序、选择排序。 冒泡排序 冒泡排序...

  • OC常用算法

    排序算法 冒泡排序 选择排序 快速排序 插入 二分查找

网友评论

    本文标题:冒泡排序、选择排序、折半查找

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