1 00:00:00,000 --> 00:00:13,300 2 00:00:13,300 --> 00:00:15,010 >> ROB Bowden: Hi, aku Rob. 3 00:00:15,010 --> 00:00:16,790 Bagaimana kita menggunakan pencarian biner? 4 00:00:16,790 --> 00:00:18,770 Mari kita cari tahu. 5 00:00:18,770 --> 00:00:23,400 Jadi, perhatikan bahwa pencarian ini kita akan untuk menerapkan rekursif. 6 00:00:23,400 --> 00:00:27,470 Anda juga bisa menerapkan pencarian biner iteratif, jadi jika Anda melakukan itu, 7 00:00:27,470 --> 00:00:29,280 itu baik-baik saja. 8 00:00:29,280 --> 00:00:32,820 >> Sekarang pertama, mari kita ingat apa yang parameter untuk pencarian dimaksudkan untuk menjadi. 9 00:00:32,820 --> 00:00:36,120 Di sini, kita melihat nilai int, yang seharusnya nilai pengguna 10 00:00:36,120 --> 00:00:37,320 mencari. 11 00:00:37,320 --> 00:00:40,800 Kami melihat nilai-nilai int array, yang adalah array di mana kita 12 00:00:40,800 --> 00:00:42,520 mencari nilai. 13 00:00:42,520 --> 00:00:45,602 Dan kita melihat int n, yang panjang array kami. 14 00:00:45,602 --> 00:00:47,410 >> Sekarang, hal pertama yang pertama. 15 00:00:47,410 --> 00:00:51,350 Kami memeriksa untuk melihat apakah n sama dengan 0, di hal ini kita kembali palsu. 16 00:00:51,350 --> 00:00:54,770 Itu hanya mengatakan jika kita memiliki kosong array, nilai jelas tidak dalam 17 00:00:54,770 --> 00:00:57,860 array kosong, sehingga kita dapat kembali palsu. 18 00:00:57,860 --> 00:01:01,250 >> Sekarang, kami benar-benar ingin melakukan biner Pencarian bagian dari pencarian biner. 19 00:01:01,250 --> 00:01:04,780 Jadi, kita ingin mencari tengah elemen dari array ini. 20 00:01:04,780 --> 00:01:09,130 Di sini, kita katakan tengah sama n dibagi oleh 2, karena elemen tengah adalah 21 00:01:09,130 --> 00:01:12,240 akan menjadi panjang array kita dibagi 2. 22 00:01:12,240 --> 00:01:15,040 Sekarang kita akan memeriksa untuk melihat apakah elemen tengah sama dengan nilai kita 23 00:01:15,040 --> 00:01:16,160 mencari. 24 00:01:16,160 --> 00:01:21,030 Jadi, jika nilai tengah sama dengan nilai, kita dapat kembali benar karena kami menemukan 25 00:01:21,030 --> 00:01:22,810 nilai dalam array kita. 26 00:01:22,810 --> 00:01:26,380 >> Tapi kalau itu tidak benar, sekarang kita perlu melakukan rekursif 27 00:01:26,380 --> 00:01:27,840 langkah pencarian biner. 28 00:01:27,840 --> 00:01:30,450 Kita perlu mencari baik ke kiri dari array atau ke 29 00:01:30,450 --> 00:01:32,320 tengah array. 30 00:01:32,320 --> 00:01:39,280 Jadi di sini, kita katakan jika nilai-nilai di tengah adalah kurang dari nilai, yang berarti nilai tersebut 31 00:01:39,280 --> 00:01:41,350 lebih besar dari tengah dari array. 32 00:01:41,350 --> 00:01:45,790 Jadi nilai harus ke kanan elemen yang baru saja kita memandang. 33 00:01:45,790 --> 00:01:48,090 >> Jadi di sini, kita akan pencarian rekursif. 34 00:01:48,090 --> 00:01:50,320 Dan kita akan melihat apa yang kita lewat ini dalam hitungan detik. 35 00:01:50,320 --> 00:01:53,440 Tapi kita akan mencari ke kanan elemen tengah. 36 00:01:53,440 --> 00:01:57,710 Dan dalam kasus lain, itu berarti bahwa nilai kurang dari tengah 37 00:01:57,710 --> 00:02:00,660 array, dan jadi kita akan untuk mencari ke kiri. 38 00:02:00,660 --> 00:02:03,520 Sekarang, kiri akan menjadi sedikit lebih mudah untuk melihat. 39 00:02:03,520 --> 00:02:07,770 Jadi, kita lihat di sini bahwa kita rekursif memanggil pencarian di mana yang pertama 40 00:02:07,770 --> 00:02:10,120 Argumen ini, sekali lagi, nilai kita melihat dari atas. 41 00:02:10,120 --> 00:02:14,970 Argumen kedua akan menjadi array itu kita sedang mencari lebih. 42 00:02:14,970 --> 00:02:17,090 Dan elemen terakhir saat ini adalah tengah. 43 00:02:17,090 --> 00:02:21,650 Ingat parameter terakhir adalah int kami n, sehingga panjang array kami. 44 00:02:21,650 --> 00:02:25,310 >> Dalam panggilan rekursif untuk mencari, kami sekarang mengatakan bahwa panjang 45 00:02:25,310 --> 00:02:27,230 array tengah. 46 00:02:27,230 --> 00:02:32,900 Jadi, jika array kami adalah ukuran 20 dan kami dicari pada indeks 10, karena tengah adalah 47 00:02:32,900 --> 00:02:36,930 20 dibagi 2, itu berarti kita melewati 10 sebagai new 48 00:02:36,930 --> 00:02:38,300 panjang array kita. 49 00:02:38,300 --> 00:02:41,910 Ingatlah bahwa ketika Anda memiliki sebuah array panjang 10, yang berarti valid 50 00:02:41,910 --> 00:02:45,450 elemen di indeks 0 sampai 9. 51 00:02:45,450 --> 00:02:50,120 Jadi ini adalah apa yang kita ingin menentukan array kita diperbarui - kiri 52 00:02:50,120 --> 00:02:53,010 Array dari elemen tengah. 53 00:02:53,010 --> 00:02:55,710 >> Jadi, melihat ke kanan adalah sedikit lebih sulit. 54 00:02:55,710 --> 00:03:00,170 Sekarang pertama, mari kita pertimbangkan panjang dari array ke kanan 55 00:03:00,170 --> 00:03:01,240 elemen tengah. 56 00:03:01,240 --> 00:03:08,390 Jadi, jika array kami adalah ukuran n, maka array baru akan menjadi ukuran n dikurangi 57 00:03:08,390 --> 00:03:10,140 dikurangi tengah 1. 58 00:03:10,140 --> 00:03:12,530 Jadi, mari kita memikirkan n dikurangi tengah. 59 00:03:12,530 --> 00:03:18,710 >> Sekali lagi, jika array adalah ukuran 20 dan kita membagi dengan 2 untuk mendapatkan tengah, 60 00:03:18,710 --> 00:03:23,540 jadi tengah adalah 10, maka n dikurangi tengah akan memberi kita 10, jadi 10 61 00:03:23,540 --> 00:03:25,330 elemen di sebelah kanan tengah. 62 00:03:25,330 --> 00:03:27,780 Tapi kita juga harus dikurangi ini 1, karena kita tidak ingin 63 00:03:27,780 --> 00:03:29,700 termasuk tengah itu sendiri. 64 00:03:29,700 --> 00:03:34,190 Jadi n dikurangi tengah dikurangi 1 memberi kita jumlah elemen ke kanan 65 00:03:34,190 --> 00:03:36,800 indeks tengah dalam array. 66 00:03:36,800 --> 00:03:41,870 >> Sekarang di sini, ingat bahwa tengah parameter adalah nilai array. 67 00:03:41,870 --> 00:03:46,180 Jadi di sini, kami melewati sebuah diperbarui nilai array. 68 00:03:46,180 --> 00:03:50,930 Ini ditambah nilai tengah ditambah 1 adalah benar-benar mengatakan rekursif panggilan 69 00:03:50,930 --> 00:03:56,460 pencarian, lewat di array baru, di mana bahwa array baru dimulai di tengah 70 00:03:56,460 --> 00:03:59,370 ditambah satu dari nilai-nilai asli array kita. 71 00:03:59,370 --> 00:04:05,400 >> Sebuah sintaks alternatif untuk itu, sekarang Anda sudah mulai melihat pointer, adalah 72 00:04:05,400 --> 00:04:10,170 nilai ampersand tengah ditambah 1. 73 00:04:10,170 --> 00:04:17,149 Jadi, ambil alamat tengah ditambah satu unsur nilai-nilai. 74 00:04:17,149 --> 00:04:23,690 >> Sekarang, jika Anda tidak nyaman memodifikasi array seperti itu, Anda 75 00:04:23,690 --> 00:04:28,900 bisa juga telah menerapkan ini menggunakan fungsi pembantu rekursif, di mana 76 00:04:28,900 --> 00:04:31,680 bahwa fungsi pembantu mengambil lebih argumen. 77 00:04:31,680 --> 00:04:36,610 Jadi, bukannya mengambil hanya nilai, array, dan ukuran dari array, 78 00:04:36,610 --> 00:04:42,315 fungsi helper bisa mengambil lebih argumen, termasuk indeks lebih rendah 79 00:04:42,315 --> 00:04:45,280 bahwa Anda akan peduli dalam array dan indeks atas bahwa Anda peduli 80 00:04:45,280 --> 00:04:46,300 tentang array. 81 00:04:46,300 --> 00:04:49,770 >> Dan melacak kedua lebih rendah indeks dan indeks atas, Anda tidak 82 00:04:49,770 --> 00:04:52,780 perlu pernah memodifikasi nilai-nilai asli array. 83 00:04:52,780 --> 00:04:56,390 Anda hanya dapat terus menggunakan nilai array. 84 00:04:56,390 --> 00:04:59,540 Tapi di sini, perhatikan kita tidak perlu pembantu berfungsi selama kita 85 00:04:59,540 --> 00:05:01,760 bersedia untuk memodifikasi asli nilai array. 86 00:05:01,760 --> 00:05:05,020 Kami bersedia untuk lulus dalam sebuah nilai diperbarui. 87 00:05:05,020 --> 00:05:09,140 >> Sekarang, kita tidak bisa pencarian biner lebih array yang disortir. 88 00:05:09,140 --> 00:05:12,220 Jadi, mari kita mendapatkan ini diurutkan keluar. 89 00:05:12,220 --> 00:05:17,650 Sekarang, perhatikan jenis yang melewati dua parameter int nilai-nilai, yang merupakan 90 00:05:17,650 --> 00:05:21,110 array itu kita menyortir, dan int n, yang merupakan panjang array yang 91 00:05:21,110 --> 00:05:22,250 kita penyortiran. 92 00:05:22,250 --> 00:05:24,840 Jadi, di sini kita ingin menerapkan algoritma sorting 93 00:05:24,840 --> 00:05:26,690 yang o n kuadrat. 94 00:05:26,690 --> 00:05:30,560 Anda bisa memilih bubble sort, pemilihan sort, atau insertion sort, atau 95 00:05:30,560 --> 00:05:32,670 semacam lain yang kita miliki tidak terlihat di kelas. 96 00:05:32,670 --> 00:05:36,380 Tapi di sini, kita akan menggunakan selection sort. 97 00:05:36,380 --> 00:05:40,030 >> Jadi, kita akan iterate atas seluruh array. 98 00:05:40,030 --> 00:05:44,360 Nah, di sini kita melihat bahwa kita iterasi dari 0 sampai n dikurangi 1. 99 00:05:44,360 --> 00:05:45,990 Kenapa tidak semua jalan sampai ke n? 100 00:05:45,990 --> 00:05:49,320 Nah, jika kita sudah diurutkan pertama n dikurangi 1 elemen, maka 101 00:05:49,320 --> 00:05:54,420 Unsur yang terakhir apa yang harus sudah di tempat yang benar, sehingga pemilahan lebih 102 00:05:54,420 --> 00:05:56,520 seluruh array. 103 00:05:56,520 --> 00:05:58,770 >> Sekarang, ingat bagaimana seleksi sort bekerja. 104 00:05:58,770 --> 00:06:01,950 Kita akan pergi ke seluruh array mencari nilai minimum dalam 105 00:06:01,950 --> 00:06:04,480 array dan tongkat yang di awal. 106 00:06:04,480 --> 00:06:07,610 Kemudian kita akan pergi ke seluruh yang array yang lagi mencari kedua 107 00:06:07,610 --> 00:06:10,410 elemen terkecil, dan tongkat yang di posisi kedua dalam 108 00:06:10,410 --> 00:06:12,100 array, dan sebagainya. 109 00:06:12,100 --> 00:06:14,330 Jadi, itulah yang ini lakukan. 110 00:06:14,330 --> 00:06:17,290 >> Di sini, kita melihat bahwa kita pengaturan arus minimum 111 00:06:17,290 --> 00:06:20,030 nilai indeks ke-i. 112 00:06:20,030 --> 00:06:23,160 Jadi pada iterasi pertama, kita akan untuk mempertimbangkan nilai minimum yang harus 113 00:06:23,160 --> 00:06:25,030 awal array kita. 114 00:06:25,030 --> 00:06:28,500 Kemudian, kita akan iterate atas sisa array, memeriksa untuk 115 00:06:28,500 --> 00:06:31,870 melihat apakah ada unsur-unsur yang lebih kecil daripada salah satu yang kita saat ini 116 00:06:31,870 --> 00:06:33,900 mengingat minimum. 117 00:06:33,900 --> 00:06:38,840 >> Jadi di sini, nilai-nilai j ditambah satu - itu kurang dari apa yang kita saat ini 118 00:06:38,840 --> 00:06:40,380 mengingat minimum. 119 00:06:40,380 --> 00:06:42,940 Kemudian kita akan memperbarui apa kita pikirkan adalah minimum untuk 120 00:06:42,940 --> 00:06:44,640 j indeks ditambah 1. 121 00:06:44,640 --> 00:06:48,540 Jadi, lakukan itu di seluruh array, dan setelah ini untuk loop, minimum 122 00:06:48,540 --> 00:06:53,160 harus menjadi elemen minimum dari posisi ke-i dalam array. 123 00:06:53,160 --> 00:06:57,350 >> Setelah kita memiliki itu, kita dapat menukar nilai minimum ke posisi ke-i 124 00:06:57,350 --> 00:06:58,230 dalam array. 125 00:06:58,230 --> 00:07:00,130 Jadi ini hanya swap standar. 126 00:07:00,130 --> 00:07:03,940 Kami menyimpan dalam nilai sementara - nilai ke-i dalam array - 127 00:07:03,940 --> 00:07:08,460 dimasukkan ke dalam nilai-i di array tersebut nilai minimum yang dimiliki di sana, 128 00:07:08,460 --> 00:07:13,580 dan kemudian menyimpan kembali ke tempat nilai minimum saat ini digunakan untuk menjadi 129 00:07:13,580 --> 00:07:16,460 nilai ke-i dalam array, sehingga bahwa kita tidak kehilangan itu. 130 00:07:16,460 --> 00:07:20,510 >> Jadi, yang terus di iterasi berikutnya. 131 00:07:20,510 --> 00:07:23,480 Kami akan mulai mencari kedua nilai minimum dan masukkan itu ke dalam 132 00:07:23,480 --> 00:07:24,590 posisi kedua. 133 00:07:24,590 --> 00:07:27,440 Pada iterasi ketiga, kita akan mencari nilai minimum ketiga dan insert 134 00:07:27,440 --> 00:07:31,550 itu ke posisi ketiga, dan sebagainya sampai kita memiliki array diurutkan. 135 00:07:31,550 --> 00:07:33,820 Nama saya Rob, dan ini adalah selection sort. 136 00:07:33,820 --> 00:07:39,456