게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 공부중에 질문이요.
게시물ID : computer_44609짧은주소 복사하기
작성자 : 123124
추천 : 0
조회수 : 467회
댓글수 : 4개
등록시간 : 2012/04/22 22:44:40

#include <stdio.h>

char compare(int x, int y);
int bsearch(int a[], int n, int key);

main()
{
     int list[] = { 10, 12, 33, 56, 77, 89, 90, 100 };  //list 배열에 넣어줍니다.
     int n = sizeof(list) / sizeof(int);  //배열에 몇개가 들어간지 구하기 위해서 
     int key, i;       


     printf("Enter a key: ");   //어느 숫자를 찾을지 써줍니다.
     scanf("%d", &key);
     if ( (i = bsearch(list, n, key)) != -1)         
           printf("%d is exist at [%d]\n", key, i+1);
     else
           printf("%d is not exist\n", key);

}   /* main */


  
char compare(int x, int y)
{

     if (x > y) return '>';        
     else if (x < y) return '<';
     else return '=';

} /* compare */



int bsearch(int a[], int n, int key)
{


     int mid;
     int left = 0, right = n-1;

     while (left <= right) {                 
//right 가 left가 클때 돌려줍니다. left가 right가보다 더크면 그숫자는 없는겁니다.
           mid = (left + right) / 2;        
 //mid를 구합니다. 짝수일때는 이해가되는데 홀수있때는 어떻게구할라고..??
           switch ( compare(key, a[mid]) ) {   //compare 함수에 내가구할수랑 mid값을 넣어줍니다.
          case '>' : left = mid + 1; break;  
 //  리턴으로 >오면 key값이 mid값 보다 크면 left = mid + 1 
 case '<' : right = mid - 1; break;    
 //   리턴으로 <오면 key값이 mid값 작으면 left  = mid - 1                                                           
 case '=' : return mid;                //  같으면 찾은겁니다.
   } 
     }
     return -1;    


정렬되있는숫자중에  원하는 숫자가 몇번째 인지 찾는건데요.
제가 주석을 달아봤는데요.. 중간에 모르는게 있어서요.
 if ( (i = bsearch(list, n, key)) != -1)    이함수의 의미를 모르겠네요..

char compare(int x, int y)
{

     if (x > y) return '>';        
     else if (x < y) return '<';
     else return '=';


그리고 중간에 이함수가있는데요 이함수가 왜 필요하죠??
bsearch함수 아래에 보면  compare 넣어주는데 그냥 아래에 써도되지않나요?? 
질문이 좀많네요.. 아직 부족해서 리딩도 잘못하네요..
모르는것좀 조언해주시면 감사하겠습니다.. 
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호