|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date |
2008/05/23 18:14:40 |
Name |
루시리스 |
Subject |
머지소트, 바이너리서치, C언어 잘 아시는분 계신가요... |
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
void merge(int h, int m, char parm_a[], char parm_b[], char parm_string[])
{
// string이 들어있는 배열은 0에서 부터 시작하기때문에 0을 대입
int i = 0, j = 0, k = 0;
// 머지소트는 두 배열을 합칠때 크기를 비교해서 합치다가 한 배열이 끝이면 루프탈출
while(i < h && j < m){
if(parm_a[i] < parm_b[j]){
parm_string[k] = parm_a[i];
i++;
} else {
parm_string[k] = parm_b[j];
j++;
}
k++;
}
// 다른 한 배열의 끝이 나올때까지 머지 배열에 대입해주어야함
while(i < h) parm_string[k++] = parm_a[i++];
while(j < m) parm_string[k++] = parm_b[j++];
}
void mergesort(int parm_count, char parm_string[])
{
if(parm_count > 1){
int h = parm_count / 2, i;
int m = parm_count - h;
char *p_string_a = (char *)malloc(h*sizeof(int));
char *p_string_b = (char *)malloc(m*sizeof(int));
if(p_string_a == NULL) exit(EXIT_FAILURE); // 메모리 할당 실패
if(p_string_b == NULL) exit(EXIT_FAILURE); // 메모리 할당 실패
for(i = 0; i < h; i++) p_string_a[i] = parm_string[i];
for(i = h; i < parm_count; i++) p_string_b[i - h] = parm_string[i];
mergesort(h, p_string_a);
mergesort(m, p_string_b);
merge(h, m, p_string_a, p_string_b, parm_string);
// 동적으로 할당한 메모리를 반환한다.
free(p_string_a);
free(p_string_b);
}
}
int Binary_Search(int str_length, char str_data[], char *str_key)
{
int x = 0, data_mid, data_count=str_length-1;
char str_middata[1];
while(x <= data_count){
data_mid = (x + data_count) / 2;
str_middata[1] = str_data[data_mid];
if(strcmp(str_key, str_middata) == -1)
data_count = data_mid - 1;
else if(strcmp(str_key, str_middata) == 1)
x = data_mid + 1;
else
return data_mid;
}
return -1;
}
void main()
{
int count = 0;
char input_string[64], *find_string, data_search;
printf("정렬할 문자열을 입력하세요 : ");
scanf("%s", input_string);
// 정렬할 문자열의 길이를 얻는다.
count = strlen(input_string);
mergesort(count, input_string);
printf("\n정렬된 문자열 : %s\n\n", input_string);
printf("이진 검색을 이용하여 찾을 문자 하나를 입력하세요 : ");
scanf("%s", &find_string);
printf("\n");
data_search=Binary_Search(count, input_string, find_string);
if(data_search != -1)
printf("%d번째에 위치한 문자입니다.\n\n", data_search+1);
else
printf("찾을 수 없습니다.\n");
}
입력받은 문자들을 머지소트로 정렬한후 한 문자를 입력하면 바이너리 서치로 그 문자가 위의 정렬된 문자열에서 몇번째
위치에 있는지 찾는 프로그램인데요.. 머지소트는 해결이되었는데 바이너리서치 함수 부분이 해결이안됬네요...
제가 생각하기에는 맞게 짰다고 생각되는데 실행하니까 제대로 실행이안되네요..
어디가 문제인지 알수있을까요?
|
통합규정 1.3 이용안내 인용
"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
|