C言語でのバイナリ検索(バイナリ検索)(vs2013)


バイナリ検索

  バイナリ検索はバイナリ検索とも呼ばれ、効率的な検索方法です。ただし、バイナリ検索では、線形テーブルが順次ストレージ構造を採用する必要があり、テーブル内の要素はキーワード順に配置されます。見つかった要素がテーブルにある場合はそれを返し、要素がテーブルにない場合はNULLを返します。

シーケンシャル検索とバイナリ検索の比較

バイナリ検索が効率的な検索方法であるのはなぜですか?

まずは、見てみましょう順次検索を。例えば、
私たちは持っている:
      3、6、
9 、11、12、15、19、20、22、これらの9つの数字を。
   数字の1つを自由に選択します。11だとすると、これらの9つの数字から11を見つける必要があります。見つかった番号が11の場合、それは見つかります。9つの番号の中に11がない場合、それは見つかりません。
   最初のものから始めたとしましょう。1
回目:3、間違っています
。2回目:6、間違っています
。3回目:9、間違っています。4
回目:11、見つかりました。
   これは順次検索です。1回の検索で除外できる番号は1つだけです。11を探しています。これは4回しかかかりませんが、25を探している場合は9回になります。さらに番号がある場合は、もっと時間がかかります。


では、より効率的なバイナリ検索は何ですか?
  探している数がまだ11であると仮定すると、
最初はこれらの9つの数の中間の数を取ります:12。11<12、これは小さいので、12の右側の部分を除外できます。
2回目:12:9の左側の中央の数字を取ります。11> 9の方が大きいので、9の左側を除外できます。
3回目:9の右側の中央の数字を取ります:11。11= 11、それを見つけました。
   この方法は、上記の順次検索よりもはるかに高速です。この例では違いが1つしかない場合がありますが、数値が多い場合はどうでしょうか。バイナリ検索ははるかに高速です。これがバイナリ検索です。

使用する

c言語でのバイナリ検索のアプリケーションを見てみましょう。ここではVS2013を使用しています。

#include <stdio.h>
int main()
{
    
    
	char arr[] = {
    
     1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//tofind表示要找的数字
	int tofind = 7;
	//数组最左边元素的下标
	int left = 0;
	//数组最右边元素的下标
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	//sizeof(arr)是计算arr的字节
	//sizeof(arr[0])是计算数组中第一个的字节
	//两者相除就是数组长度
	while (left <= right){
    
    
		int mid = (left + right) / 2;
		if (tofind > arr[mid]){
    
    
		//说明你要查找的数在mid 的右边,
		//因此需要向右递归查找
			left = mid + 1;
		}
		else if (tofind < arr[mid]){
    
    
			right = mid - 1;
		}
		else{
    
    
			printf("找到了,下标是:%d\n", mid);
			break;
		}
	}
	if (left>right){
    
    
		printf("找不到");
	}
	system("pause");
	return 0;
}

おすすめ

転載: blog.csdn.net/qq_34270874/article/details/109139685