• 折半查找


    首先,这个算法的确很简单,但是写了很多次还是自己不能完全的写对.上码分析:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <time.h>
     4 
     5 #define LENGTH  4   // 数组的长度
     6 #define MAX     10   // 随机数的最大值
     7 
     8   /** 折半查找的例子
     9     * 先随机生成一个数组然后进行从小到大排序,然后折半查找输入的数
    10     * @date 2014-07-26
    11     */
    12 
    13 void bubblesort(int *data)
    14 {
    15     int i,j,t;
    16     for(i = 0; i < LENGTH; i++)
    17     {
    18         for(j = 0; j < LENGTH -1 - i; j++)
    19         {
    20             if(data[j] > data[j+1])
    21             {
    22               t = data[j];
    23               data[j] = data[j+1];
    24               data[j+1] = t;
    25             }
    26         }
    27     }
    28 }
    29 int binSearch(int *data,int n,int num)
    30 {
    31     int index,start = 0,end = n-1;
    32 
    33     while(start <= end)
    34     {
    35         index = (start + end)/2;
    36         if(data[index] < num) // 要找的数在右边
    37            start= index+1;
    38         else if(data[index] > num)  // 要找的数在左边
    39            end = index-1;
    40         else
    41            return index;
    42     }
    43     return -1;
    44 }
    45 int main()
    46 {
    47     int i,*data = NULL,num,result;
    48     data = malloc(sizeof(int)*LENGTH);
    49 
    50     srand((int)time(0));
    51     for(i = 0; i < LENGTH ; i++)
    52         data[i] = 1+ (int)(MAX*rand()/(RAND_MAX+1.0));
    53 
    54     bubblesort(data);
    55 
    56     printf("
    请输入(<%d)",MAX);
    57     scanf("%d",&num);
    58 
    59     result = binSearch(data,LENGTH,num);
    60 
    61     if(result > -1)
    62         printf("%d",result);
    63     else
    64         printf("NO such number in the array!");
    65     return 0;
    66 }

    分析: 一直都知道核心那部分,判断数大往右查,数小往左查. 

          困惑点: 开始一直不知道循环结束的条件.

                    这次我最开始就写错了,当找到数的时候我只是 i = index,然后循环就退不出来了.

                    如果此例中是 start < end 也不对,当数组长度是4的时候,要是查找第一个数的话是查不到的,所以必须带等号.

  • 相关阅读:
    从VS转MyEclipse的15天使用体验
    JSP标签
    cookie实现自动登录
    js中substring和substr的用法
    用原生sql查询返回实体对象的方法
    @Column
    event.keyCode用法及列表
    jQuery的选择器中的通配符[id^='code']
    struts2中<s:radio>标签设置默认选中项
    在Struts2中实现登陆后跳转到登录前页面
  • 原文地址:https://www.cnblogs.com/programmer-cjr/p/3870627.html
Copyright © 2020-2023  润新知