Penjelasan terperinci algoritma pengisihan gelembung Golang
Isih gelembung ialah algoritma pengisihan biasa Prinsipnya sangat mudah, ia adalah sejenis pengisihan pertukaran. Idea teras algoritma ini adalah untuk membandingkan saiz dua elemen bersebelahan, dan kemudian menukar kedudukan mereka mengikut hubungan saiz Dalam setiap pusingan, elemen terbesar atau terkecil disusun pada satu hujung jujukan. Terdapat dua kaedah pelaksanaan khusus: satu dari depan ke belakang, dan satu lagi dari belakang ke depan. Artikel ini akan memperkenalkan pelaksanaan pengisihan gelembung dalam golang.
Mula-mula, kami mencipta tatasusunan integer dan menghantarnya ke dalam fungsi isihan gelembung:
package main import "fmt" func main() { arr := []int{3, 7, 1, 4, 2, 8, 5, 9, 6} fmt.Println("排序前:",arr) BubbleSort(arr) fmt.Println("排序后:",arr) } func BubbleSort(arr []int) { n := len(arr) for i := 0; i < n-1; i++ { for j := 0; j < n-1-i; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } }
Dalam fungsi BubbleSort, mula-mula kami mendapat panjang tatasusunan, dan kemudian menyediakan dua sarang gelung . Gelung luar ialah gelung ke atas keseluruhan tatasusunan, dan gelung dalam ialah gelung ke atas elemen. Dalam gelung dalaman, kami membandingkan saiz elemen bersebelahan dan kemudian menukar kedudukannya berdasarkan perhubungan saiz.
Kaedah pertukaran dilaksanakan melalui tugasan berbilang golang, iaitu, "arr[j], arr[j+1] = arr[j+1], arr[j]". Pernyataan ini memberikan nilai arr[j+1] kepada arr[j] dan nilai arr[j] kepada arr[j+1]. Dengan cara ini pertukaran antara dua elemen dapat diselesaikan.
Perlu diambil perhatian bahawa setiap pusingan pengisihan akan memindahkan elemen terkecil atau terbesar ke satu hujung jujukan. Untuk memastikan kecekapan, kita perlu menolak bilangan elemen yang disusun i dalam gelung luar, iaitu, "untuk j := 0; j < n-1-i; j++". Dengan cara ini, bilangan perbandingan dalam setiap pusingan pengisihan tidak akan termasuk elemen yang telah diisih.
Akhir sekali, kami memanggil fungsi BubbleSort dalam fungsi utama dan mencetak hasil tatasusunan pra-isih dan pasca-isih pada konsol.
Seterusnya kami menguji prestasi algoritma ini. Kita boleh menggunakan perpustakaan ujian golang sendiri untuk ujian. Kod ujian khusus adalah seperti berikut:
package main import ( "testing" ) func TestBubbleSort(t *testing.T) { arr := []int{3, 7, 1, 4, 2, 8, 5, 9, 6} BubbleSort(arr) if !checkSort(arr) { t.Error("BubbleSort test failed") } } func checkSort(arr []int) bool { n := len(arr) for i := 0; i < n-1; i++ { if arr[i] > arr[i+1] { return false } } return true }
Dalam fungsi utama, kami mentakrifkan fungsi yang dipanggil TestBubbleSort, yang digunakan untuk menguji ketepatan fungsi BubbleSort yang kami tulis. Dalam fungsi ujian, kami memanggil fungsi BubbleSort dan menggunakan fungsi checkSort untuk menentukan sama ada hasil pengisihan adalah betul. Jika hasil pengisihan tidak betul, mesej ralat "Ujian BubbleSort gagal" akan dikeluarkan.
Seterusnya, kami menggunakan arahan go test untuk menjalankan ujian. Masukkan arahan berikut pada baris arahan:
go test -v -run="TestBubbleSort"
Perintah ini akan menjalankan fungsi TestBubbleSort dan mengeluarkan keputusan ujian pada konsol. Keputusan adalah seperti berikut:
=== RUN TestBubbleSort --- PASS: TestBubbleSort (0.00s) PASS ok _/home/go_ws/src/gotest/src/TestBubbleSort 0.097s
Seperti yang dapat dilihat daripada keputusan ujian, algoritma pengisihan lulus ujian unit, dan masa ujian hanya 0.097 saat. Oleh itu, algoritma isihan gelembung berfungsi dengan baik dari segi kecekapan.
Ringkasan
Artikel ini memperkenalkan pelaksanaan pengisihan gelembung dalam golang dan mengesahkan ketepatan dan kecekapan algoritma pengisihan melalui ujian unit. Dalam aplikasi praktikal, kami boleh mengoptimumkan algoritma ini dengan sewajarnya mengikut keperluan untuk mencapai hasil pengisihan yang lebih baik.
Atas ialah kandungan terperinci Bagaimana kedudukan golang menggelegak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!