改进的二分算法描述

 

              

       改进的二分算法描述

设数组A[n];int,head,tail,mid;目标数字是target.算法针对的是有序的数字序列进行的查找

(1)       初始head=0,tail=n-1;{if(target==A[head]|| target==A[tail])do stop;else do(2)}

(2)      Set  int  mid=(head+tail)/2;{if(target==A[mid]) do stop;if(target>A[mid]) do head=mid+1;if(target<A[mid]) do tail=mid-1;};do (3)

(3)      if(head<=tail)do(2) ; else(标准着没有找到) do stop;

ps:为什么等于的时候还要执行,这是因为有一种可能是刚好是相等的时候,然后取mid时找到。

 1 // try.cpp : Defines the entry point for the console application.
 2 //
 3 /************************************************************************/
 4 /*     二分查找算法,对无序的先进行排序,然后再用此算法                                                           */
 5 /************************************************************************/
 6 #include "stdafx.h"
 7 #include"algorithm"
 8 using namespace std;
 9 /*bool compare(int x,int y){
10     return x>y;
11 }*/
12 int main(){
13     int a[7]={1,3,2,6,4,9,6
14     };
15     int target;
16     int head=0;
17     int tail=6;
18     int mid;
19     sort(a,a+7);//升序
20     while(scanf("%d",&target)!=EOF){
21     
22     //sort(a,a+7,compare);
23 
24         if (target==a[head]||target==a[tail])
25         {
26             printf("I did\n");
27             continue;
28         }
29         while (head<=tail)//第三步,结束的条件
30         {
31             mid=(head+tail)/2;
32             if(target>a[mid])head=mid+1;//因为是升序,所以是将mid+1;
33             if (target<a[mid])tail=mid-1;
34             if(target==a[mid])break;
35         }
36         if(head>tail)printf("No Found\n");//判断跳出循环的原因是>,还是因为break;
37         else printf("I did\n");
38     }
39     return 0;
40 }
View Code

 

posted @ 2014-12-10 12:45  薛小黑  阅读(168)  评论(0编辑  收藏  举报