• 折半查找(C语言)


    例如 :13  44  77  90 127 189 242  3549

    (1)定义一个变量key用于存放要查找的数字242

       key = 242

      (2) 定义变量low、mid和high分别存储数组的最小下标、中间下标和最大下标。并有:

      mid = (low+hight)/2 = (0 + 7)/2 = 3

    (3)此时a[3] = 90, 而key > 90,说明了242在90的右边,则往后查找:

        low = mid + 1 = 4

       (4)然后冲新重新定义mid

         mid = (4 + 7)/2  = 5

       (5)此时a[5] = 189, 而key > 189,说明242在189的右边,继续往后查找:

        low = mid + 1 = 6

       (6)然后重新更新mid:

       mid = (6 + 7) = 6 

       (7)此时a[6] = 242,找到了

      再找一下key = 77:

    (1)key = 77, mid = (low + high)/2 = (0+7)/2 = 3

      (2) 此时 a[3] = 90,而key < 90,说明了77在90的左边,则往前查找:

       high = mid -1 = 2

      (3)然后重新更新mid:

      mid = (0 + 2)/2 = 1

     (4) 此时a[1]  = 44,而key > 45,说明77在44的右边,则往后查找

      low = 1 + 1 = 2

    (5)然后更新mid

     mid = (2 + 2)/2 = 2

    (6)此时a[2] = 77 ,就找到了

    若所查找的数据在数组中没有的话,比如查找124

    (1)key = 123, mid = (low + high) /2 = (0 + 7) = 3

      (2) 此时a[3] = 90,key > 90 说明了124在90的右边,则往后查找:

       low  = mid + 1 = 4

       (3)然后重新更新mid

       mid = (4 + 7) = 5

      (4) 此时a[5] = 189,  key < 189 ,说明了124在189的左边,则往左边查找:

       (5) hight = mid - 1 = 4

       (6)此时low == high ,如果该数任不是要找的数的话,说明该序列中就没有该数了

    程序代码如下:

    /**
     * 二分查找
     * @return
     */
    #include 
    int main() {
        int a[] = {13, 44, 77, 90, 127, 189, 242, 3549};
        int key; //存放要查找的数
        int low = 0;
        int high = sizeof(a) / sizeof(a[0]);
        int mid;
        int flg = 0; //标志位,用于判断是否存在要找的数
        printf("请输入您要查找的数据:");
        scanf("%d", &key);
        while ((low <= high))
        {
            mid = (low + high) / 2;
            if(key < a[mid])
            {
                high = mid - 1;
            } else if (a[mid] < key)
            {
                low = mid + 1;
            } else
            {
                printf("下标 = %d\n", mid);
                flg = 1;
                break;
            }
        }
        if (flg == 0)
        {
            printf("sorry, data is not found \n");
        }
        return 0;
    }
    
  • 相关阅读:
    Flutter创建工程
    Unity - Alpha Is Transparency
    抖音矩阵系统,抖音矩阵系统源码,抖音SEO源码、
    大数据系列教程之 Kafka基础
    tcl之事务
    博客园商业化之路-众包平台:500位驭码好汉,等你来发单挑战
    【力扣】螺旋矩阵
    Linux 基金会执行董事 Jim Zemlin:开源如何成为创新的关键推动力
    JAVA 基础网络编程(后一部分)
    vue-element-admin npm install报错
  • 原文地址:https://blog.csdn.net/qq_37270243/article/details/128107507