c·c++/c 프로그래밍

이분검색

바로이순간 2013. 5. 14. 15:55

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main() {

    int data[1000];

    int i, j, n=1000;

    int x, tmp, low, high, mid;


    srand(time(NULL));


    for(i=0;i<n;i+=1) {

        data[i]=rand();

    }


    //  Selection sort


    for(i=0;i<n-1;i+=1) {

        x = i;  // 가장 작은 수의 인덱스

        for(j=i+1;j<n;j+=1) {

            if(data[x]>data[j]) { x=j; }

        }

        // data[i]와  data[x]를 서로 바꾸어 준다.

        // 지금 찾은 리스트 중에서 가장 작은 원소를 data[i]에 넣는다.

        tmp=data[i];

        data[i]=data[x];

        data[x]=tmp;

    }    


    // 정렬한 자료를 출력한다.

    for(i=0;i<n;i+=1) {

        printf("%d ", data[i]);

    }

    printf("\n\n");


    // 사용자로 부터 수를 입력 받는다.

    scanf("%d", &x);


    // Binary Search 시작


    low=0;      // 낮은 인덱스

    high=n-1;  // 높은 인덱스

    while(low<=high) { // 낮은 인덱스가 높은 인덱스 이하일 경우에만 돈다.

        mid=(low+high)/2;  // 중간을 계산한다.

        if(data[mid]==x) { break; }  // 만약 찾았다면 while문을 탈출

        if(data[mid]<x) {     // 만약 찾는 값이 중간값보다 크다면

            low=mid+1;         // low를 mid+1로 주고 다시 시작한다.

        } else {                  // 만약 찾는 값이 중간값보다 작다면

            high=mid-1;         // high를 mid-1로 주고 다시 시작한다.

        }

    }

    // 만약 data[mid]가 찾는 값이면 찾았고, 아니면 못찾은 것이다.

    if(data[mid]==x) {

        printf("Found the key %d at %dth\n", x, mid);

    } else {

        printf("The key %d not found\n", x);

    }


    return 0;

}

'c·c++ > c 프로그래밍' 카테고리의 다른 글

count words  (0) 2013.05.21
c/c++ 책소개  (0) 2013.05.20
pi 계산하기  (0) 2013.05.14
Dijkstra's algorithm  (0) 2013.05.11
연결리스트를 이용한 병합정렬(천만개의 정수자료 정렬)  (0) 2013.05.11