0Pricing
Go Academy · Pelajaran

Mencari Data Terurut

Pencarian biner

Mencari Data Terurut adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Mengapa Mencari Data Terurut

Setelah slice terurut, Anda dapat menemukan elemen jauh lebih cepat menggunakan pencarian biner daripada memeriksa setiap item.

Paket sort milik Go menyediakan pembantu pencarian yang berjalan dalam waktu logaritmik.

Linear vs Biner

Pencarian linear memeriksa setiap elemen satu per satu (O(n)). Pencarian biner membagi dua rentang pencarian pada setiap langkah (O(log n)), tetapi data harus terurut terlebih dahulu.

sort.SearchInts

sort.SearchInts menemukan indeks tempat suatu nilai berada, atau tempat nilai tersebut akan disisipkan agar slice tetap terurut. Slice harus sudah terurut dalam urutan menaik.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 3, 5, 7, 9}
	i := sort.SearchInts(nums, 5)
	fmt.Println("index:", i)
}

Memastikan Kecocokan

SearchInts mengembalikan indeks meskipun nilainya tidak ada, yaitu titik penyisipannya. Selalu pastikan dengan memeriksa i < len(s) && s[i] == target.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 3, 5, 7}
	target := 4
	i := sort.SearchInts(nums, target)
	found := i < len(nums) && nums[i] == target
	fmt.Println("index:", i, "found:", found)
}

Titik Penyisipan

Ketika suatu nilai tidak ada, indeks yang dikembalikan tepat menunjukkan tempat Anda harus menyisipkannya agar urutan tetap terjaga. Di sini, 4 akan ditempatkan pada indeks 2.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 3, 5, 7}
	i := sort.SearchInts(nums, 4)
	fmt.Println("insert 4 at index:", i)
}

SearchStrings

sort.SearchStrings melakukan hal yang sama untuk slice string yang terurut.

package main

import (
	"fmt"
	"sort"
)

func main() {
	words := []string{"apple", "cherry", "mango"}
	i := sort.SearchStrings(words, "cherry")
	fmt.Println("index:", i)
}

sort.Search Umum

sort.Search adalah inti yang fleksibel. Anda memberikan panjang dan fungsi f yang menghasilkan false lalu true; fungsi ini mengembalikan indeks terkecil tempat f bernilai true.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{2, 4, 6, 8, 10}
	i := sort.Search(len(nums), func(i int) bool {
		return nums[i] >= 6
	})
	fmt.Println("first >= 6 at index:", i)
}

Menemukan Elemen Pertama di Atas Batas

Karena sort.Search menemukan batas ketika kondisi berubah menjadi true, fungsi ini sangat cocok untuk kueri seperti nilai pertama yang lebih besar dari ambang batas.

package main

import (
	"fmt"
	"sort"
)

func main() {
	scores := []int{10, 20, 30, 40}
	i := sort.Search(len(scores), func(i int) bool {
		return scores[i] > 25
	})
	fmt.Println("first > 25:", scores[i])
}

Harus Terurut Terlebih Dahulu

Pencarian biner mengasumsikan adanya urutan. Jika slice tidak terurut, hasilnya tidak bermakna. Selalu urutkan sebelum mencari.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{9, 1, 5, 3}
	sort.Ints(nums)
	i := sort.SearchInts(nums, 5)
	fmt.Println(nums, "-> index of 5:", i)
}

Peningkatan Performa

Untuk slice berisi satu juta elemen, pencarian linear mungkin memeriksa satu juta item; pencarian biner hanya memeriksa sekitar 20. Biaya mengurutkan sekali terbayar jika Anda melakukan banyak pencarian.

Memilih Pembantu Pencarian

Ringkasan:

  • sort.SearchInts / SearchStrings / SearchFloat64s - slice bertipe
  • sort.Search - kondisi khusus pada data apa pun yang dapat diindeks

Pemeriksaan Cepat

Anda memanggil sort.SearchInts(s, 4) pada slice terurut yang tidak berisi 4. Apa yang dikembalikan?

Ringkasan

Mencari data terurut dengan pencarian biner:

  • Data harus diurutkan terlebih dahulu
  • Pembantu mengembalikan indeks atau titik penyisipan
  • Pastikan kecocokan dengan pemeriksaan kesamaan
  • sort.Search menangani kondisi khusus

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mencari Data Terurut” gratis?

Ya — teks lengkap “Mencari Data Terurut” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mencari Data Terurut”?

Pencarian biner Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mencari Data Terurut” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengurutkan Slice
  2. Urutan Pengurutan Kustom
  3. Mencari Data Terurut
  4. Pengurutan Stabil
← Kembali ke Go Academy