//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 (Target> ScoreList[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);
}
댓글 없음:
댓글 쓰기