• 二分查找(用c语言实现)


    (一)二分查找有一个前提条件:所查找的数组必须是有序的。

    (二)查找过程如下(假设需要查找的数保存在变量item中):

            1.设数组的第一项索引为low,最后一项索引为hight,中间项索引为mid(这里我用“mid”表示中间项的值,“low”表示第一项的值,"high"表示最后一项的值);

            2.比较“mid”与item;

            3.若“mid”>item,则表明item位于数组的前半部分,所以设置high的值为mid-1;

            4.若“mid”<item,则表明item位于数组的后半部分,所以设置low的值为mid+1;

            5.若high>low,设置mid为(low+hight)/2(即low到high的中间项),返回步骤2;

            6.直到查到了一项与item相等,或者high<low为止;

            7.判断“mid”与item是否相等,若相等则表明查找成功,否则表明查找失败(即未找到)。

    (三)下面是我用c语言实现二分查找的代码(关键代码为函数search):

     1 #include<stdio.h>
     2 int main()
     3 {
     4     void order(int a[], int n);
     5     int search(int a[], int n, int item);
     6     void output(int a[], int n);
     7     int a[] = { 10,99,22,90,46,89,55,88,60,70 };
     8     int item, index;
     9     printf("请输入需要查询的数字:");
    10     scanf_s("%d", &item);
    11     order(a, 10);
    12     index = search(a, 10, item);
    13     output(a, 10);
    14     if (index != -1)
    15     {
    16         printf("%d为数组的第%d项。", item, index);
    17     }
    18     else
    19     {
    20         puts("未找到。");
    21     }
    22 }
    23 
    24 //输出数组
    25 void output(int a[], int n)
    26 {
    27     int i;
    28     for (i = 0; i < n; i++)
    29     {
    30         printf("a[%d] = %d
    ", i, a[i]);
    31     }
    32 }
    33 
    34 //排序-升序
    35 void order(int a[], int n)
    36 {
    37     int i, j, v;
    38     for (i = 0; i < n; i++)
    39     {
    40         for (j = 0; j < n - i - 1; j++)
    41         {
    42             if (a[j] > a[j + 1])
    43             {
    44                 v = a[j], a[j] = a[j + 1], a[j + 1] = v;
    45             }
    46         }
    47     }
    48 }
    49 
    50 //查找-二分查找
    51 int search(int a[], int n, int item)
    52 {
    53     int low = 0, high = n - 1, mid = 0;
    54     do
    55     {
    56         mid = (low + high) / 2;
    57         if (item > a[mid])
    58         {
    59             low = mid + 1;
    60         }
    61         else 
    62         {
    63             high = mid - 1;
    64         }
    65     } while (high >= low && a[mid] != item);
    66     if (a[mid] == item)
    67     {
    68         return mid;
    69     }
    70     else
    71     {
    72         return -1;
    73     }
    74 }
  • 相关阅读:
    CSU1256 天朝的单行道(spfa)
    WordPress For SAE进入后台
    Android studio 使用NDK工具实现JNI编程
    android动画具体解释一 概述
    VC6.0编译DLL,使用VS2010调用问题及解决方法
    android 地址控件概述
    android 多线程概述
    android 中的 window,view,activity具体关系
    比较windows phone程序启动和android程序启动原理
    比较windows phone 的回退事件与android的回退事件
  • 原文地址:https://www.cnblogs.com/ben-/p/11223258.html
Copyright © 2020-2023  润新知