バイナリナビゲーションアルゴリズム

1317 ワード

バイナリ探索とは?


バイナリサーチ(二分サーチ)とは、サーチする材料を半分に分け、中間値をサーチするターゲット値と比較することで、材料のサーチをすばやく見つけることができることを意味します.ただし、バイナリナビゲーションを行うには、データをソートする必要があります.
バイナリナビゲーションを行うデータが上記の順序で並べられていると仮定すると、数値7を検索するバイナリナビゲーションプロセスを見てみましょう.
最初のアドレス
  • と最後のアドレスの中間値(0+9)/2=4(小数点を削除)を計算します.
  • の中間位置の4番目のアドレスの値8が検索する値であることを確認します.7は8より小さいため、検索する値の範囲は0~4アドレスです.
  • 検索範囲
  • の最初のアドレスと最後のアドレスの位置を使用して、中間位置を計算し、検索する値と比較します.
  • 中間位置=(0+4)/2=2
    中間位置2号面アドレスの値5が検索する値であることを確認します.7は5より大きいので、検索する値は3~4アドレスの範囲です.検索範囲
  • の最初のアドレスと最後のアドレスの位置を使用して、中間位置を計算し、検索する値と比較します.
  • 中間位置=(3+4)/2=3.5->小数点カット->3
  • の中間位置の3番目のアドレスの値7が検索する値であるかどうかを確認し、出力します.
  • ソースコード


    #include
    main(){
    int target,low,high,mid;
    int data[10] = {2,3,5,7,8,9,11,13,15,20};
    scanf("%d",&target);
    low = 0; //search대상범위의 첫번째값 
    high = 9; //search대상범위의 마지막값
    
    while(1){
    	if(low<=high){
    		mid=(low+high)/2; //mid값 계산 (소수점이하는 자동으로 절삭)
    		
    		if(target==data[mid]){
    			printf("%d는 %d번째 index에 있습니다.",target,mid);
    			break;
    		}
    		
    		if(target<=data[mid]){
    			high=mid; //mid값 위 절삭 
    		}else{
    			low=mid; //mid값 아래 절삭
    	 	}
    	}else{
    		printf("%d는 존재하지 않습니다.",target);
    		break;
    	}
    }