C言語 - 二分探索(ケース)

二分探索

1 はじめに

C 言語では、通常、次の 2 種類の検索を使用します。

(1) 順次検索

(2)二分探索

2. 逐次検索ケースのデモンストレーション

数列があります: {23, 1, 34, 89, 101}
数字当てゲーム: キーボードから任意の数字を入力し、その数字がその数列に含まれるかどうかを判断します [数列検索] 要件: 見つかった場合は、それを見つけるように促します、および give 添え字の値が表示されますが、見つからない場合はプロンプトは表示されません。

アイデア: 走査用の配列を作成し、1 つずつ比較し、等しい場合は検索します。

#include <stdio.h>

int seqSearch(int arr[],int arrLen,int val ){//数组,数组的大小,要查找的值
	int i;
	for(i=0;i<arrLen;i++){
		if(arr[i] == val){
			return i;
		}
	}
	//如果在for循环中,没有执行到return,说明没有找到
	return -1;
}

int main(){
	
	//有一个数列:{23,1,34,89,101}
	//猜数游戏:从键盘中任意输入一个数,判断数列中是否包含该数【顺序查找】 
	//要求: 如果找到了,就提示找到,并给出下标值, 找不到提示 没有。
	
	//分析思路
	//1.建立数组进行遍历,一个一个的比较,如果相等,则找到
	int arr[] = {23,1,34,88,102};
	int arrLen = sizeof(arr) / sizeof(int);
	int index = seqSearch(arr,arrLen,102);//调用函数
	if(index != -1){//没有找到
		printf("找到下标为%d",index);
	}else{
		printf("没有找到");
	}
	getchar();
}

画像-20221028140214888

3. 二分探索事例のデモンストレーション

順序付けされた配列に対して二分検索 {1,8, 10, 89, 1000, 1234} を実行し、数値を入力してその
数値が配列内に存在するかどうかを確認し、添え字を見つけてください。存在しない場合は、「そのようなものはありません」というプロンプトが表示されます。番号」。

二分查找的前提是,该数组是一个有序数组
思路分析:
我们要查找的数是findVal
1.先找到数组中间这个数,和findval比较
2.如果midVal > findVal说明,应该在midVal的左边查找
2.如果midVal < findVal说明,应该在midVal的右边查找
4.如果midVal = findVal,说明找到
5.还有一个问题,没有考虑找不到的情况
如果leftIndex > rightIndex ,说明这个数组都比较过,但是没有找到
//二分查找
#include  <stdio.h>
int binarySearch(int arr[],int leftIndex,int rightIndex,int findVal){
    
    
	
	//如果leftIndex > rightIndex ,说明这个数组都比较过,但是没有找到
	if(leftIndex > rightIndex){
    
    
		return -1;
	}
	
	//先找到数组中间这个数midVal
	int midIndex = (leftIndex + rightIndex) / 2;//中间数的下标
	int midVal = arr[midIndex];
	//如果midVal > findVal说明,应该在midVal的左边查找
	if(midVal > findVal){
    
    
		binarySearch(arr,leftIndex,midIndex-1,findVal);
	}else if(midVal < findVal){
    
    //应该在midVal的右边查找
		binarySearch(arr,midIndex+1,rightIndex,findVal);
	}else{
    
    
		return midIndex;//返回该数的下标
	}
	
}
int main(){
    
    
	int arr[] = {
    
    1,8,10,89,1000,1234};
	int arrLen = sizeof(arr) / sizeof(int);
	int index = binarySearch(arr,0,arrLen-1,89);
	if(index!=-1){
    
    
		printf("index = %d",index);
	}else{
    
    
		printf("没有找到");
	}
	getchar();
	
}

おすすめ

転載: blog.csdn.net/m0_53415522/article/details/127570649