#include <stdio.h>
#include <stdlib.h>
#define MAX_N 25
int n;
typedef struct{
char name[30];
int year;
double box;
} Movie;
Movie movies[MAX_N] = {};
void read_movies()
{
int i;
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%s %d %lf",
&(movies[i].name[0]),
&(movies[i].year),
&(movies[i].box));
}
}
int binary_search(Movie *movies, int num, int qyear)
{
/**
穴埋め:
二分探索を行ってmoviesの中からqyearにマッチするものを探す。
見つからなければ-1を返す。
**/
// int n = 1;
// printf("BS:%d \n",num);
int mid;
int low = 0;
int high = num-1;
while(low<=high){
mid = (low+high)/2;
if(movies[mid].year>qyear){
high = mid-1;
}else if(movies[mid].year<qyear){
low = mid+1;
}else{
return mid;
}
}
return -1;
// for(int i = num/2;i<num;){
// if(i+1 == num || i-1 == -1){
// return -1;
// }
// // printf("qyear:%d year:%d \n",qyear,movies[i].year);
// if(qyear>movies[i].year){
// i++;
// continue;
// }else if(qyear < movies[i].year){
// i--;
// continue;
// }else{
// // printf("bsres:%s %d\n",movies[i].name,movies[i].year);
// // break;
// return i;
// }
// // if(qyear>movies[i].year){
// // i++;
// // }else{
// // i--;
// // }
// }
// for(int i=0;i<num;i++){
// printf("BS: %d\n",movies[i].year);
// }
}
int linear_search(Movie *movies, int num, int qyear)
{
// printf('%d \n',num);
/**
穴埋め:
線形探索を行ってmoviesの中からqyearにマッチするものを探す。
見つからなければ-1を返す。
**/
// int n=-1;
for(int i=0;i<num;i++){
if(qyear == movies[i].year){
return i;
}
}
return -1;
}
int cmpyear(const void *p1, const void *p2)
{
Movie *s1 = (Movie *)p1;
Movie *s2 = (Movie *)p2;
// printf("%d\n",s1->year);
// printf("%d\n",s2->year);
// printf("-----------------\n");
/**
穴埋め:
配給年(year)が早い順、年が同じ場合は
興行収入(box)が大きい順に
並ぶように比較関数を定義する
s1の方が先に来るべきであれば-1を、
s2の方が先に来るべきであれば1を、
どちらでもよければ0をreturnするようにする。
**/
if(s1->year > s2->year){
return 1;
}else{
return -1;
}
}
int main(int argc, char **argv) {
// 今回はmain関数は変更しないこと!
read_movies();
qsort(movies, n, sizeof(Movie), cmpyear);
int qyear;
for (qyear = 1997; qyear < 2001; qyear++) {
printf("In %d\n", qyear);
int index_linear = linear_search(movies, n, qyear),
index_binary = binary_search(movies, n, qyear);
printf("=== linear search ===\n");
if (index_linear == -1) {
printf("%d: not found\n", qyear);
} else {
printf("%d: %s %d %lf\n", qyear, movies[index_linear].name,
movies[index_linear].year,
movies[index_linear].box);
}
printf("=== binary search ===\n");
if (index_binary == -1) {
printf("%d: not found\n", qyear);
} else {
printf("%d: %s %d %lf\n", qyear, movies[index_binary].name,
movies[index_binary].year,
movies[index_binary].box);
}
printf("\n");
}
}