1. 程式人生 > 其它 >AcWing 779. 最長公共字串字尾

AcWing 779. 最長公共字串字尾

演算法

二分法

用途

查詢資料

適用情況

一批有序資料

基本思路

基本思想:選定這批數中居中間位置的一個數與所查數比較,看是否為所找之數,若不是,利用資料的有序性,可以決定所找的數是在選定數之前還是在之後,從而很快可以將查詢範圍縮小一半。以同樣的方法在選定的區域中進行查詢,每次都會將查詢範圍縮小一半,從而較快地找到目的數。

實現程式

#include "stdio.h"
#define M 10
intmain()
{
inta[10]={11,20,67,86,99,100,654,878,989,4563};
intfound,low,high,mid,i,b;
printf("請輸入要查詢的數字");
scanf("%d",&b);
low=0;
high=M-1;
found=0;
mid=5;
for(i=0;i<M;i++)
{
if(b==a[mid] )
{
printf("已找到資料:%d",mid);
gotoC;
}
else
{
mid=(low+high)/2;
if(a[mid]<b)
{
low=mid+1;

}
else
{
high=mid-1;
}
}
}
printf("沒有發現該數!");
C: ;

}
/*******************************************
* while(low<high)
* {
* mid=(mid+high)/2;
* if(b==a[mid])
* {
* found = 1;
* break;
* }
* eles if(b>a[mid])
* {
* low=mid+1;
* }
* else
* {
* high = mid-1;
* }
* }
* *****************************************/

補充

非法輸入問題

每個函式都有一個返回值

scanf的返回值為:

成功錄入 返回1

未被成功錄入 返回0