zoukankan      html  css  js  c++  java
  • 二分法查找

    二分法是一个快速查找的简单算法,当然它要求查找的数组是有序的,看起来好像比暴力要麻烦一些,但是即便加上排序,logn+logn也要比n小,因此在即便加上排序,也要比暴力的时间效率高很多(小白见解,不对请指正,不胜感激),例题代码如下:

     1 #include "stdafx.h"
     2 #include<cstdlib>
     3 #include <iostream>
     4 #include <algorithm>
     5 //首先明白原理和能写出来还是有很多差距的,其次对于C输入数组,数组作为参数传递,指针的应用等等都还需要慢慢去理解...
     6 int DichotomySearch(int Array[],int k,int n)
     7 {
     8     int min = 1,max =n;
     9     int mid;
    10     //二分查找核心代码
    11     while(min <= max)
    12     {
    13         mid = (min + max) / 2;
    14         if(k < Array[mid])
    15         {
    16             max = mid - 1;
    17         }
    18         else if(k > Array[mid])
    19         {
    20             min = mid + 1;
    21         }
    22         else
    23         {
    24             return 1;
    25         }
    26     }
    27     return 0;
    28 }
    29 int _tmain(int argc, _TCHAR* argv[])
    30 {
    31     int Array[40000];
    32     int k;
    33     int n;
    34     printf("请输入将要输入有序数组的长度:");
    35     scanf("%d",&n);
    36     printf("请输入一个有序数组:");
    37     for(int i = 1; i <= n; i++)//当输入长度不确定时可以用EOF
    38     {
    39         scanf("%d",&Array[i]);
    40     }
    41     printf("请输入一个数字:");
    42     scanf("%d",&k);
    43     //必须是有序数组
    44     if(DichotomySearch(Array,k,n))
    45         printf("%d在数组中出现过",k);
    46     else
    47         printf("%d在数组中未出现",k);
    48     system("pause");
    49     return 0;
    50 }
  • 相关阅读:
    HDU 3835 R(N)
    HDU 2498 Digits
    HUST 1027 Enemy Target!
    【POJ 3714】 Raid
    【POJ 2965】 The Pilots Brothers' refrigerator
    【POJ 2054】 Color a Tree
    【POJ 1328】 Radar Installation
    【POJ 3190】 Stall Reservations
    【POJ 3614】 Sunscreen
    【BZOJ 3032】 七夕祭
  • 原文地址:https://www.cnblogs.com/baikequanshu/p/3390775.html
Copyright © 2011-2022 走看看