728x90
반응형
[연습 문제 1] 선형 검색의 스캐닝 과정을 상세하게 표시하는 프로그램을 작성하시오.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
int num,key,cnt=0;
printf("[선형 검색]\n");
printf("검색 개수: ");scanf("%d",&num);
int *arr = (int*)malloc(sizeof(int)*(num+1));//보초를 위한 공간 추가 할당
for(int i=0;i<num;i++){printf("X[%d]: ",i);scanf("%d",&arr[i]);}
arr[num] = key;
printf("검색값: ");scanf("%d",&key);
printf("검색을 시작합니다....\n\n");
printf(" |");for(int i=0;i<num;i++)printf("%3d",arr[i]);printf("\n");
printf("----+");for(int i=0;i<num*3+1;i++)printf("-");
printf("\n");
for(int i=1;i<=num+1;i++){
if(i == num+1){
printf("\n검사실패...\n");
break;
}
printf(" |");for(int j=0;j<i*2+cnt;j++)printf(" "); printf("*\n");
printf(" %d |",i);for(int i=0;i<num;i++)printf("%3d",arr[i]);printf("\n");
if(arr[i-1]==key){
printf("\n검사완료!\n");
printf("%d는 x[%d]에 존재합니다.",key,i);
break;
}
cnt ++;
}
}
[연습 문제 2] 검색할 값과 같은 값을 갖는 요소가 하나이상일 경우 같은 값 중 가장 앞으로 요소를 찾는 함수를 작성하라.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int bin_search2(int arr[],int n,int key){
int LOW,MID,HIGH;
LOW = 0;
HIGH = n -1;
do{
MID = (LOW + HIGH)/2;
if(arr[MID] == key) return MID;
else if(arr[MID] < key) LOW = MID + 1;
else HIGH = (MID -1);
/**
중앙값보다 검색하고자 하는 값이 큰 경우
-> (중앙값+1)를 LOW로
중앙값보다 검색하고자 하는 값이 작은 경우
-> (중앙값-1)를 HIGH
*/
}while(LOW <= HIGH);
return -1;
/**
LOW : 검색 범위 맨 앞의 인덱스 == pl
MID : 검색 범위 가운데 인덱스 == pr
HIGH : 검색 범위 맨 뒤의 인덱스 == pc
*/
}
int main(){
int num,key,cnt=0;
printf("이진검색\n");
printf("요소 개수: ");scanf("%d",&num);
int *arr = (int*)malloc(sizeof(int)*num);
printf("오름차순으로 입력하세요.\n");
while(num > cnt){
if(cnt == 0){
printf("x[%d]: ",cnt);
scanf("%d",&arr[cnt]);
cnt ++;
}
else{
printf("x[%d]: ",cnt);
scanf("%d",&arr[cnt]);
if(arr[cnt-1] <= arr[cnt]) cnt ++;
else printf("오름차순으로 다시 입력하세요.\n");
}
}
printf("검색값: ");scanf("%d",&key);
int idx = bin_search2(arr,num,key);
if(idx == -1) puts("검색에 실패했습니다.");
else{
for(int i=idx;i>=1;i--){
if(arr[i-1]!=key){
printf("첫번째 검색값 %d는 arr[%d]에 있습니다.",key,idx);
break;
}
}
// printf("%d는 arr[%d]에 있습니다.",key,idx);
}
free(arr);
}
728x90
반응형
'Datastructure > [Algorithm]' 카테고리의 다른 글
[자료구조] 스택의 활용: 연결리스트 (0) | 2022.02.13 |
---|---|
[자료구조] 스택의 활용: 배열 (0) | 2022.02.12 |
[자료구조] 선형 검색 (0) | 2022.02.06 |
[자료구조] 연결리스트의 집합 구현 (0) | 2022.02.06 |
[자료구조] 연결리스트의 활용 2 : 다항식 덧셈 (0) | 2022.02.06 |