探索についての復習 ・逐次探索法 番兵を用いない場合 番兵を用いる場合 ・2分探索法 プログラムはホームページに 記載されているものに従うこととする。 逐次探索法 Key: ・初期データ a[] は,チーム名と去年の順位 keyにkintetsuが入力されたとき, Kintetsu i= 012 0 a[] Ham 1 4 Kintetsu 2 3 6 Kintetsu 2 Seibu 1 Kintetsu Kintetsu Orix 一致しない 一致した! ―> 4 Lotte 5 5 Daiei 3 i++ 探索終了 ( i<Nを常にチェック ) i=2のときに終了したので2番目の レコードの名前(a[2].name)を表示 逐次探索法 Key: keyにkintetsuが入力されたとき, Kintetsu char key[20]; printf("Search Data ? "); scanf("%s",key); i= 012 0 a[] ・初期データ a[] は,チーム名と去年の順位 Ham 1 4 Orix 6 2 3 Kintetsu 2 Seibu 1 4 Lotte 5 5 Daiei 3 while(i<N && strcmp(key,a[i].name)!=0) Kintetsu Kintetsu 一致しない 一致した! Kintetsu ―> i++ 探索終了 ( i<Nを常にチェック ) printf("%s %d",a[i].name,a[i].order); i=2のときに終了したので2番目の レコードの名前(a[2].name)を表示 逐次探索法(番兵) ・初期データ Key: a[] は,チーム名と去年の順位 keyにkintetsuが入力されたとき, Kintetsu i= 012 0 a[] Ham 1 4 Orix 6 2 3 Kintetsu 2 Seibu 1 4 Lotte 5 5 Daiei 3 6 Kintetsu 終了判定の 見張り役 Kintetsu Kintetsu 一致しない 一致した! Kintetsu ―> i++ 探索終了 ( i<Nは確認しない ) i=2のときに終了したので2番目の レコードの名前(a[2].name)を表示 逐次探索法(番兵) ・初期データ Key: keyにkintetsuが入力されたとき, Kintetsu char key[20]; printf("Search Data ? "); scanf("%s",key); i= 012 0 a[] a[] は,チーム名と去年の順位 Ham 1 4 Orix 6 2 3 4 Kintetsu 2 Seibu 1 Lotte 5 a[N].name=key; 5 Daiei 3 while(strcmp(key,a[i].name)!=0) Kintetsu Kintetsu 一致しない 一致した! 6 Kintetsu 終了判定の 見張り役 Kintetsu ―> i++ 探索終了 ( i<Nは確認しない ) printf("%s %d",a[i].name,a[i].order); i=2のときに終了したので2番目の レコードの名前(a[2].name)を表示 初期データ a[]: 東海地区のテレビチャンネル 2分探索法 Key:31 low a[] low low high high 0 1 2 3 4 5 6 7 8 9 flag 1 3 5 9 11 25 31 33 35 37 01 mid=(low+high)/2=(5+9)/2=14/2=7 mid=(low+high)/2=(5+6)/2=11/2=5 mid=(low+high)/2=(0+9)/2=9/2=4 mid=(low+high)/2=(6+6)/2=12/2=6 a[mid]=a[7]=33> a[mid]=a[5]=25< key=31 a[mid]=a[4]=11< key=31 a[mid]=a[6]=31=key=31 low=mid+1=6 high=mid-1=6 low=mid+1=5 一致したのでFlagを1にして終了
© Copyright 2025 ExpyDoc