1 00:00:00,000 --> 00:00:08,532 >> [MUSIC PLAYING] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Hal pertama yang Anda mungkin pemberitahuan tentang menemukan adalah bahwa kita sudah 3 00:00:12,060 --> 00:00:13,450 memiliki kode ditulis untuk kita. 4 00:00:13,450 --> 00:00:15,160 Ini disebut kode distribusi. 5 00:00:15,160 --> 00:00:18,000 Jadi kita tidak hanya menulis kita sendiri kode dari awal lagi. 6 00:00:18,000 --> 00:00:22,800 Sebaliknya, kita mengisi rongga dalam beberapa kode yang sudah ada. 7 00:00:22,800 --> 00:00:27,790 >> Program find.c meminta untuk nomor untuk mengisi tumpukan jerami, akan mencari 8 00:00:27,790 --> 00:00:32,189 tumpukan jerami untuk jarum pengguna disampaikan, dan hal ini dengan memanggil mengurutkan dan 9 00:00:32,189 --> 00:00:35,590 pencarian, fungsi didefinisikan di helpers.c. 10 00:00:35,590 --> 00:00:37,670 Jadi find.c ditulis sudah. 11 00:00:37,670 --> 00:00:40,770 Tugas Anda adalah menulis pembantu. 12 00:00:40,770 --> 00:00:41,870 >> Jadi apa yang kita lakukan? 13 00:00:41,870 --> 00:00:44,210 Kami melaksanakan dua fungsi. 14 00:00:44,210 --> 00:00:49,030 Search, yang mengembalikan true jika nilai ditemukan dalam tumpukan jerami, kembali 15 00:00:49,030 --> 00:00:51,370 false jika nilai adalah bukan di tumpukan jerami. 16 00:00:51,370 --> 00:00:57,990 Dan kemudian kita juga menerapkan semacam yang macam array yang disebut nilai-nilai. 17 00:00:57,990 --> 00:00:59,960 >> Jadi mari kita menangani pencarian. 18 00:00:59,960 --> 00:01:04,560 Pencarian saat ini diimplementasikan sebagai pencarian linear, tetapi Anda dapat melakukan banyak 19 00:01:04,560 --> 00:01:05,550 lebih baik dari itu. 20 00:01:05,550 --> 00:01:09,910 Pencarian linear diimplementasikan dalam O waktu n, yang cukup lambat. 21 00:01:09,910 --> 00:01:13,850 Meskipun, dapat mencari setiap daftar yang diberikan kepadanya. 22 00:01:13,850 --> 00:01:20,130 Tugas Anda adalah untuk melaksanakan pencarian biner, yang telah berjalan waktu O dari log n. 23 00:01:20,130 --> 00:01:21,130 Itu cukup cepat. 24 00:01:21,130 --> 00:01:23,170 >> Tapi ada ketentuan a. 25 00:01:23,170 --> 00:01:27,600 Pencarian biner hanya dapat mencari melalui daftar pra-diurutkan. 26 00:01:27,600 --> 00:01:30,370 Mengapa demikian? 27 00:01:30,370 --> 00:01:32,620 >> Nah mari kita lihat sebuah contoh. 28 00:01:32,620 --> 00:01:36,280 Mengingat sebuah array nilai, tumpukan jerami, kita akan melihat 29 00:01:36,280 --> 00:01:37,130 untuk jarum. 30 00:01:37,130 --> 00:01:40,460 Dan dalam contoh ini, integer tiga. 31 00:01:40,460 --> 00:01:44,130 Cara bahwa pencarian biner bekerja adalah bahwa kita membandingkan nilai tengah 32 00:01:44,130 --> 00:01:48,370 array ke jarum, seperti bagaimana kami membuka buku telepon ke tengah 33 00:01:48,370 --> 00:01:50,660 Halaman dalam seminggu nol. 34 00:01:50,660 --> 00:01:54,650 >> Jadi setelah membandingkan nilai tengah untuk jarum, Anda dapat membuang baik 35 00:01:54,650 --> 00:01:58,530 kiri atau kanan setengah dari array dengan memperketat batas Anda. 36 00:01:58,530 --> 00:02:03,390 Dalam kasus ini, sejak tiga, jarum kami, kurang dari 10, nilai tengah, 37 00:02:03,390 --> 00:02:05,990 benar terikat dapat menurunkan. 38 00:02:05,990 --> 00:02:08,400 Tapi cobalah untuk membuat batas Anda seketat mungkin. 39 00:02:08,400 --> 00:02:11,630 Jika nilai tengah tidak jarum, maka Anda tahu bahwa Anda tidak perlu 40 00:02:11,630 --> 00:02:13,010 memasukkannya dalam pencarian Anda. 41 00:02:13,010 --> 00:02:17,310 Jadi kau benar terikat dapat mengencangkan batas pencarian hanya sedikit lebih, 42 00:02:17,310 --> 00:02:21,770 dan seterusnya dan seterusnya sampai Anda menemukan jarum Anda. 43 00:02:21,770 --> 00:02:23,480 >> Jadi apa pseudocode terlihat seperti? 44 00:02:23,480 --> 00:02:28,420 Nah sementara kita masih melihat melalui daftar dan masih memiliki elemen untuk 45 00:02:28,420 --> 00:02:33,690 melihat, kita mengambil tengah daftar, dan membandingkan nilai tengah untuk 46 00:02:33,690 --> 00:02:34,950 jarum kami. 47 00:02:34,950 --> 00:02:37,310 Jika mereka sama, maka itu berarti kita sudah menemukan jarum dan kita bisa 48 00:02:37,310 --> 00:02:38,990 kembali benar. 49 00:02:38,990 --> 00:02:42,870 >> Jika tidak, jika jarum kurang dari nilai tengah, maka itu berarti kita 50 00:02:42,870 --> 00:02:47,280 dapat membuang bagian kanan, dan hanya mencari sisi kiri array. 51 00:02:47,280 --> 00:02:51,090 Jika tidak, kami akan mencari sisi kanan dari array. 52 00:02:51,090 --> 00:02:54,410 Dan pada akhirnya, jika Anda tidak memiliki lebih elemen yang tersisa untuk mencari tapi Anda 53 00:02:54,410 --> 00:02:58,050 belum menemukan jarum Anda belum, maka Anda return false karena jarum 54 00:02:58,050 --> 00:03:01,890 pasti tidak di tumpukan jerami. 55 00:03:01,890 --> 00:03:05,270 >> Sekarang hal yang rapi tentang pseudocode ini dalam pencarian biner adalah bahwa hal itu dapat 56 00:03:05,270 --> 00:03:09,940 diartikan baik sebagai berulang atau implementasi rekursif. 57 00:03:09,940 --> 00:03:13,810 Jadi akan rekursif jika Anda menelepon fungsi pencarian dalam pencarian 58 00:03:13,810 --> 00:03:17,350 berfungsi di kedua setengah dari array. 59 00:03:17,350 --> 00:03:21,030 Kita akan membahas rekursi sedikit kemudian di tentu saja, tapi tahu bahwa itu adalah 60 00:03:21,030 --> 00:03:24,190 pilihan jika Anda ingin mencoba. 61 00:03:24,190 --> 00:03:26,030 >> Sekarang mari kita lihat semacam. 62 00:03:26,030 --> 00:03:30,750 Urutkan mengambil array dan integer n, yang merupakan ukuran array. 63 00:03:30,750 --> 00:03:34,030 Sekarang ada berbagai jenis macam, dan Anda dapat melihat beberapa 64 00:03:34,030 --> 00:03:36,370 celana pendek untuk demo dan penjelasan. 65 00:03:36,370 --> 00:03:39,580 Jenis kembali untuk kami Fungsi semacam ini batal. 66 00:03:39,580 --> 00:03:43,580 Jadi itu berarti bahwa kita tidak akan untuk kembali Array apapun dari macam. 67 00:03:43,580 --> 00:03:48,140 Kami benar-benar akan mengubah sangat array itu disahkan ke dalam diri kita. 68 00:03:48,140 --> 00:03:52,290 >> Dan itu mungkin karena array dikirimkan dengan referensi di C. Sekarang kita akan 69 00:03:52,290 --> 00:03:55,290 lihat lebih lanjut tentang ini nanti, tetapi perbedaan penting antara passing 70 00:03:55,290 --> 00:03:59,340 dalam sesuatu seperti integer dan passing dalam array, adalah bahwa ketika Anda 71 00:03:59,340 --> 00:04:03,490 lulus dalam integer, C hanya akan membuat salinan dari integer yang dan lulus 72 00:04:03,490 --> 00:04:04,450 ke fungsi. 73 00:04:04,450 --> 00:04:08,530 Variabel asli tidak akan berubah setelah fungsi ini selesai. 74 00:04:08,530 --> 00:04:12,480 Dengan sebuah array, di sisi lain, itu tidak akan membuat salinan, dan Anda akan 75 00:04:12,480 --> 00:04:17,910 sebenarnya bisa mengedit sangat array itu sendiri. 76 00:04:17,910 --> 00:04:21,269 >> Jadi satu jenis semacam ini semacam seleksi. 77 00:04:21,269 --> 00:04:24,750 The selection sort bekerja dengan mulai awal, dan kemudian Anda iterate 78 00:04:24,750 --> 00:04:26,820 atas dan menemukan elemen terkecil. 79 00:04:26,820 --> 00:04:30,710 Dan kemudian Anda swap yang terkecil elemen dengan yang pertama. 80 00:04:30,710 --> 00:04:34,360 Dan kemudian Anda pindah ke elemen kedua , Menemukan terkecil berikutnya 81 00:04:34,360 --> 00:04:38,320 elemen, dan kemudian swap bahwa dengan elemen kedua dalam array karena 82 00:04:38,320 --> 00:04:41,100 elemen pertama sudah diurutkan. 83 00:04:41,100 --> 00:04:45,370 Dan kemudian Anda melanjutkan untuk setiap elemen dalam mengidentifikasi terkecil 84 00:04:45,370 --> 00:04:47,690 nilai dan swapping keluar. 85 00:04:47,690 --> 00:04:53,460 >> Karena aku sama dengan 0, elemen pertama untuk n dikurangi 1, Anda akan membandingkan 86 00:04:53,460 --> 00:04:57,820 setiap nilai berikutnya setelah itu dan menemukan indeks dari nilai minimum. 87 00:04:57,820 --> 00:05:02,520 Setelah Anda menemukan indeks nilai minimum, Anda dapat swap bahwa nilai array 88 00:05:02,520 --> 00:05:05,930 minimum dan berbagai I. 89 00:05:05,930 --> 00:05:09,760 >> Tipe lain dari jenis yang dapat Anda menerapkan adalah bubble sort. 90 00:05:09,760 --> 00:05:14,380 Jadi bubble sort iterates atas daftar membandingkan elemen yang berdekatan dan 91 00:05:14,380 --> 00:05:17,720 swapping elemen yang berada dalam urutan yang salah. 92 00:05:17,720 --> 00:05:22,380 Dan cara ini, elemen terbesar akan gelembung sampai akhir. 93 00:05:22,380 --> 00:05:28,070 Dan daftar ini diurutkan sekali tidak lebih unsur telah bertukar. 94 00:05:28,070 --> 00:05:31,920 >> Jadi mereka adalah dua contoh semacam algoritma yang dapat Anda menerapkan untuk 95 00:05:31,920 --> 00:05:33,230 program find. 96 00:05:33,230 --> 00:05:37,350 Setelah Anda selesai menyortir, dan Anda sudah dilakukan pencarian, Anda sudah selesai. 97 00:05:37,350 --> 00:05:39,720 Nama saya adalah Zamyla, dan ini adalah CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUSIC PLAYING]