7.20.2017

자료구조 BinarySearch

//Score.h 헤더파일 만들기

#pragma once

#ifndef SCORE_H
#define SCORE_H

typedef struct {
  int number;
  double score;
}Score;

Score DataSet[] = {
  1. 87.8,
  2. 69.9,
  3. 47.9,
  4. 56.6,
  5. 72.4,
  6. 67.3,
  7. 97.7,
  8. 99.8,
  9. 51.3,
  10. 12.5,
  11. 23.1,
  12. 42.7,
  13. 78.2,
  14. 55.4,
  15. 38.6,
  16. 82.4,
  17. 74.8,
  18. 90.0,
  19. 45.7,
  20. 74.2
};
#endif

============================================================================

#include <stdio.h>
#include <stdlib.h>
#include "Score.h"
//int* : 정수형 변수의 주소
//Score* : Score형 변수의 주소

Score* BinarySearch(Score ScoreList[], int Size, double Target) {
  int Left, Right, Mid;

  Left = 0;
  Right = Size - 1;

  while (Left <= Right) {
    Mid = (Left + Right) / 2;

    if (Target== ScoreList[Mid].score)
      return &(ScoreList[Mid]);
    else if (TargetScoreList[Mid].score)
      Left = Mid + 1;
    else 
      Right = Mid - 1;

    } return NULL;
}

int CompareScore(const  void * _elem1, const void _elem2) {
  Score* elem1 = (Score*)_elem1;
  Score* elem2 = (Score*)_elem2;

  if (elem1->score > elem2->score) return 1;
  else if (elem1->score < elem2->score) return -1;
  else return 0;
}

void main() {
        /*
        //1. BinarySearch 이용하기
        int Length = sizeof(DataSet) / sizeof(DataSet[0]);
        int i = 0;
        Score* found = NULL;

        //오름차순 정렬
        qsort((void*)DataSet, Length, sizeof(Score), CompareScore);

        //74.2 받은 학생 찾기
        found = BinarySearch(DataSet, Length, 74.2);
        printf("found : %d %f\n", found->number, found->score);


        //2. bSearch 함수 이용하기
  int Length = sizeof(DataSet) / sizeof(DataSet[0]);
  Scoretarget;
  Score* found = NULL;

  //오름차순 정렬
  qsort((void*)DataSet, Length, sizeof(Score), CompareScore);

  target.number = 0;
  target.score = 74.2;

  //74.2 받은 학생 찾기
  found = bsearch((void*)&target, (void*)DataSet, Length, 74.2);
  printf("found : %d %f\n", found->number, found->score);
}

댓글 없음:

댓글 쓰기