1 00:00:00,000 --> 00:00:08,532 >> [音楽再生] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN:あなたかもしれない最初の事 検索についての通知があることを、我々はすでに 3 00:00:12,060 --> 00:00:13,450 コー​​ドは、私たちのために書かれている。 4 00:00:13,450 --> 00:00:15,160 これは、ディストリビューションのコードと呼ばれています。 5 00:00:15,160 --> 00:00:18,000 だから我々は、単に我々自身を書いていない もう一からコーディングします。 6 00:00:18,000 --> 00:00:22,800 むしろ、我々は、空隙に充填している いくつかの既存のコードで。 7 00:00:22,800 --> 00:00:27,790 >> find.cプログラムは、番号の入力を要求 干し草の山を埋めるために、検索し 8 00:00:27,790 --> 00:00:32,189 針を送信したユーザーのための干し草の山、 それはソートを呼び出すことによってこれを行う 9 00:00:32,189 --> 00:00:35,590 定義された検索、関数 helpers.c中。 10 00:00:35,590 --> 00:00:37,670 そうfind.cはすでに書かれています。 11 00:00:37,670 --> 00:00:40,770 あなたの仕事は、ヘルパーを書くことです。 12 00:00:40,770 --> 00:00:41,870 >> だから我々は何をしているの? 13 00:00:41,870 --> 00:00:44,210 我々は2つ​​の機能を実装している。 14 00:00:44,210 --> 00:00:49,030 値trueを返し、検索、 帰国、干し草の山で発見されている 15 00:00:49,030 --> 00:00:51,370 偽の値である場合 いない干し草の山の中。 16 00:00:51,370 --> 00:00:57,990 そして、我々はまた、ソートを実装している その値と呼ばれる配列をソートします。 17 00:00:57,990 --> 00:00:59,960 >> それでは、検索に取り組むみましょう。 18 00:00:59,960 --> 00:01:04,560 サーチは、現在のように実現される 線形探索が、あなたは多くを行うことができます 19 00:01:04,560 --> 00:01:05,550 それよりも優れています。 20 00:01:05,550 --> 00:01:09,910 線形探索は、Oに実装されています N個の時間が、これは非常に遅い。 21 00:01:09,910 --> 00:01:13,850 が、それは検索することができます それに与えられた任意のリスト。 22 00:01:13,850 --> 00:01:20,130 あなたの仕事は、バイナリサーチを実装することです、 ログnの時のOを実行している。 23 00:01:20,130 --> 00:01:21,130 これはかなり速いです。 24 00:01:21,130 --> 00:01:23,170 >> しかし、規定があります。 25 00:01:23,170 --> 00:01:27,600 バイナリサーチは、検索することができます 事前にソートされたリストをスクロール。 26 00:01:27,600 --> 00:01:30,370 これはなぜですか? 27 00:01:30,370 --> 00:01:32,620 >> さて例を見てみましょう。 28 00:01:32,620 --> 00:01:36,280 値の配列を指定して、干し草の山、 我々は見ているつもりです 29 00:01:36,280 --> 00:01:37,130 針のため。 30 00:01:37,130 --> 00:01:40,460 この例では、 整数3。 31 00:01:40,460 --> 00:01:44,130 バイナリ検索が動作する方法はある 我々は中間の値を比較 32 00:01:44,130 --> 00:01:48,370 多くの針状に配列、どのように 我々は、中に電話帳を開いた 33 00:01:48,370 --> 00:01:50,660 週ゼロページ。 34 00:01:50,660 --> 00:01:54,650 >> そうするための中間値を比較した後 針は、次のいずれか破棄することができます 35 00:01:54,650 --> 00:01:58,530 左または配列の右半分 あなたの境界を締めて。 36 00:01:58,530 --> 00:02:03,390 我々の針三ので、この場合は、 10未満である、中間値、 37 00:02:03,390 --> 00:02:05,990 右バウンドが低下する可能性があります。 38 00:02:05,990 --> 00:02:08,400 しかし、あなたの境界を作ってみる できるだけタイト。 39 00:02:08,400 --> 00:02:11,630 中間値は、針でない場合には、 あなたはあなたがする必要がないことを知っている 40 00:02:11,630 --> 00:02:13,010 検索に含める。 41 00:02:13,010 --> 00:02:17,310 だから、右のバインドされている締めができます ほんの少し検索限度、 42 00:02:17,310 --> 00:02:21,770 などなどまで、 あなたの針を見つける。 43 00:02:21,770 --> 00:02:23,480 >> それでは、擬似コードは次のようにしますか? 44 00:02:23,480 --> 00:02:28,420 まあ我々はまだを通して見ている間 リストと、まだに要素を持っている 45 00:02:28,420 --> 00:02:33,690 中を見て、我​​々は、リストの中間を取る とに、その中間値を比較 46 00:02:33,690 --> 00:02:34,950 私たちの針。 47 00:02:34,950 --> 00:02:37,310 それらが等しいならば、それは我々がしたことを意味 針を発見し、我々はできる 48 00:02:37,310 --> 00:02:38,990 trueを返します。 49 00:02:38,990 --> 00:02:42,870 >> そうでなければ、針は未満である場合 中間値、そしてそれは我々を意味します 50 00:02:42,870 --> 00:02:47,280 ちょうど半​​分を破棄し、することができます 配列の左側を検索する。 51 00:02:47,280 --> 00:02:51,090 そうでなければ、我々は、検索します 配列の右側。 52 00:02:51,090 --> 00:02:54,410 そして、最後には、いずれかを持っていない場合 以上の要素を検索するために残されますが 53 00:02:54,410 --> 00:02:58,050 その後、まだ針を発見していない falseを返すので、針 54 00:02:58,050 --> 00:03:01,890 間違いなく干し草の山ではありません。 55 00:03:01,890 --> 00:03:05,270 >> この擬似コードについて、今きちんとしたもの バイナリサーチではそれができるということです 56 00:03:05,270 --> 00:03:09,940 反復のどちらとして解釈 または再帰実装。 57 00:03:09,940 --> 00:03:13,810 あなたが呼ばれるのであれば、それは再帰的になる 検索中の検索機能 58 00:03:13,810 --> 00:03:17,350 配列のどちらか半分に機能します。 59 00:03:17,350 --> 00:03:21,030 我々は少し後における再帰をカバーします もちろん、それがあることを知っていますか 60 00:03:21,030 --> 00:03:24,190 オプションあなたが試してみたい場合。 61 00:03:24,190 --> 00:03:26,030 >> 今度は、ソートを見てみましょう。 62 00:03:26,030 --> 00:03:30,750 並べ替え列と整数を取り 配列のサイズであるN、。 63 00:03:30,750 --> 00:03:34,030 現在、様々な異なったタイプがあります ある種の、あなたは、いくつかを見ることができます 64 00:03:34,030 --> 00:03:36,370 デモや説明はショートパンツ。 65 00:03:36,370 --> 00:03:39,580 私たちの戻り値の型 ソート機能は無効となります。 66 00:03:39,580 --> 00:03:43,580 だから我々はつもりはないことを意味します ソートから任意の配列を返します。 67 00:03:43,580 --> 00:03:48,140 私たちは、実際には非常に変更しようとしている 私たちに渡された配列。 68 00:03:48,140 --> 00:03:52,290 >> 配列であるため、それが可能だ 我々は今では、参照により渡されます 69 00:03:52,290 --> 00:03:55,290 この後の詳細が、参照してください。 通過の間に本質的な違い 70 00:03:55,290 --> 00:03:59,340 整数やパッシングのようなものでの 配列に、あるときに 71 00:03:59,340 --> 00:04:03,490 整数を渡し、Cはちょうどしようとしている その整数のコピーを作成し、合格 72 00:04:03,490 --> 00:04:04,450 それ関数である。 73 00:04:04,450 --> 00:04:08,530 元の変数は変更されません 関数が一旦終了する。 74 00:04:08,530 --> 00:04:12,480 アレイと、他方では、それがだ コピーを作成します。また、あなたがよいない 75 00:04:12,480 --> 00:04:17,910 実際に編集することが 非常に配列そのもの。 76 00:04:17,910 --> 00:04:21,269 >> だから、ソートの一種である 選択ソート。 77 00:04:21,269 --> 00:04:24,750 選択ソートは、から始まることによって動作します それから始まり、そしてあなたが繰り返し処理 78 00:04:24,750 --> 00:04:26,820 何度最小の要素を見つける。 79 00:04:26,820 --> 00:04:30,710 そして、あなたはその最小を交換 最初の1を持つ要素。 80 00:04:30,710 --> 00:04:34,360 そして、あなたは番目の要素に移動 、次に小さいを見つける 81 00:04:34,360 --> 00:04:38,320 その要素とは、スワップすることで 配列の2番目の要素のため 82 00:04:38,320 --> 00:04:41,100 最初の要素はすでにソートされます。 83 00:04:41,100 --> 00:04:45,370 だから、あなたは、すべての継続 最小を特定の要素 84 00:04:45,370 --> 00:04:47,690 価値と、それをスワップアウト。 85 00:04:47,690 --> 00:04:53,460 >> 私は0に等しいため、非常に最初の要素 Nマイナス1には、次のように比較するつもりだ 86 00:04:53,460 --> 00:04:57,820 その後、すべての次の値と見つける 最小値のインデックス。 87 00:04:57,820 --> 00:05:02,520 あなたが最小値インデックスが見つかったら、 あなたは、配列の値を入れ替えることができます 88 00:05:02,520 --> 00:05:05,930 最小値と配列I. 89 00:05:05,930 --> 00:05:09,760 >> 並べ替え、別のタイプのあなたができること 実装バブルソートです。 90 00:05:09,760 --> 00:05:14,380 リストの上ので、バブルソートを反復 隣接する要素を比較し、 91 00:05:14,380 --> 00:05:17,720 その要素を交換 間違った順序である。 92 00:05:17,720 --> 00:05:22,380 そして、このように、最大​​の要素 バブルは終わりにします。 93 00:05:22,380 --> 00:05:28,070 そしてリストは一回もう替えられていない 要素が入れ替わっている。 94 00:05:28,070 --> 00:05:31,920 >> ので、これらの種類の2つの例である あなたが実装できるアルゴリズム 95 00:05:31,920 --> 00:05:33,230 検索プログラム。 96 00:05:33,230 --> 00:05:37,350 あなたは、ソート完了し、あなたがしたら 検索を行って、あなたは完了です。 97 00:05:37,350 --> 00:05:39,720 私の名前はZamylaであり、これはCS50である。 98 00:05:39,720 --> 00:05:46,987 >> [音楽再生]