자료구조

[알고리즘/c] 이분검색

닥스훈스 2019. 4. 2. 17:55

정렬된 S에 x가 몇번째에 있는지 찾는 알고리즘

#include <stdio.h>

void main(){
	int S[] = {10,12,13,14,18,20,25,27,30,35,40,45,47};
	int x;
	printf("찾고자 하는 값을 입력하세요:");
	scanf_s("%d", &x);
	int x_result;
	x_result = location(S, 0, sizeof(S)/sizeof(int)-1, x);
	
	if(x_result==-1){
		printf("값이 없습니다.");
	}else{
		printf("S[]={");
		for(int i=0; i<sizeof(S)/sizeof(int); i++){
			printf("%d ", S[i]);
		}
		printf("}\n");
		printf("배열의 %d번째 요소에 있습니다.", x_result);
	}
}

int location(int S[], int low, int high, int x){
	int mid;
	if(low>high){
		return -1;
	}
	else{
		mid=(low+high)/2;
		if(x==S[mid]){
			return mid;
		}
		else if(x<S[mid]){
			return location(S, low, mid-1, x);
		}
		else{
			return location(S, mid+1, high, x);
		}
		
	}
}

 

<실행 화면>