Bahasa Singkong menyediakan fungsi-fungsi untuk kebutuhan sorting: sort_number, sort_boolean, sort_string, sort_array, sort_hash, sort_date, sort_rect_array_of_number_by_index, dan reverse. Dengan demikian, tutorial ini lebih ditujukan untuk kepentingan mempelajari algoritma.
Di dalam buku Dasar-dasar Algoritma, Struktur Data, dan Pemrograman dengan Bahasa Singkong, kita membahas contoh algoritma dengan langkah demi langkah bubble sort, kemudian mempelajari pemrograman dengan mengimplementasikan bubble sort tersebut dengan bahasa Singkong.
Di tutorial sebelumnya, Algoritma insertion sort dengan bahasa Singkong, kita mencontohkan langkah demi langkah insertion sort.
Pada tutorial ini, mari kita contohkan algoritma sorting lain, yaitu selection sort.
Kita siapkan fungsi selection_sort_detail yang akan menampilkan langkah demi langkahnya. Dengan contoh ARRAY yang sama, yaitu [4, 2, 1, 5, 3], dan ARRAY yang sama sekali tidak terurut dari kecil ke besar, yaitu [5, 4, 3, 2, 1].
Berikut adalah isi fungsinya:
var selection_sort_detail = fn(a) { var n = len(a) var i = 0 repeat { var m = i println("Memroses indeks: " + i) println(" Array: " + a) println(" Asumsi indeks nilai terkecil: " + m + ": " + a[m]) var j = i + 1 println(" Akan mulai lagi dari indeks: " + j) repeat { if (j >= n) { return null } println(" Indeks sekarang: " + j + ": " + a[j]) println(" Nilai terkecil: " + m + ": " + a[m]) println(" Apakah " + a[j] + " < " + a[m] + "?") if (a[j] < a[m]) { var m = j println(" Ya, dapat indeks nilai terkecil: " + m + ": " + a[m]) } else { println(" Tidak") } var j = j + 1 } if (m != i) { println(" Menukar " + a[i] + " dan " + a[m]) var t = a[i] set(a, i, a[m]) set(a, m, t) } var i = i + 1 if (i >= n) { println("Mencapai akhir array") return null } } return a }
Dan, berikut adalah contoh outputnya, dengan ARRAY [4, 2, 1, 5, 3]: println(selection_sort_detail([4, 2, 1, 5, 3]))
Memroses indeks: 0 Array: [4, 2, 1, 5, 3] Asumsi indeks nilai terkecil: 0: 4 Akan mulai lagi dari indeks: 1 Indeks sekarang: 1: 2 Nilai terkecil: 0: 4 Apakah 2 < 4? Ya, dapat indeks nilai terkecil: 1: 2 Indeks sekarang: 2: 1 Nilai terkecil: 1: 2 Apakah 1 < 2? Ya, dapat indeks nilai terkecil: 2: 1 Indeks sekarang: 3: 5 Nilai terkecil: 2: 1 Apakah 5 < 1? Tidak Indeks sekarang: 4: 3 Nilai terkecil: 2: 1 Apakah 3 < 1? Tidak Menukar 4 dan 1 Memroses indeks: 1 Array: [1, 2, 4, 5, 3] Asumsi indeks nilai terkecil: 1: 2 Akan mulai lagi dari indeks: 2 Indeks sekarang: 2: 4 Nilai terkecil: 1: 2 Apakah 4 < 2? Tidak Indeks sekarang: 3: 5 Nilai terkecil: 1: 2 Apakah 5 < 2? Tidak Indeks sekarang: 4: 3 Nilai terkecil: 1: 2 Apakah 3 < 2? Tidak Memroses indeks: 2 Array: [1, 2, 4, 5, 3] Asumsi indeks nilai terkecil: 2: 4 Akan mulai lagi dari indeks: 3 Indeks sekarang: 3: 5 Nilai terkecil: 2: 4 Apakah 5 < 4? Tidak Indeks sekarang: 4: 3 Nilai terkecil: 2: 4 Apakah 3 < 4? Ya, dapat indeks nilai terkecil: 4: 3 Menukar 4 dan 3 Memroses indeks: 3 Array: [1, 2, 3, 5, 4] Asumsi indeks nilai terkecil: 3: 5 Akan mulai lagi dari indeks: 4 Indeks sekarang: 4: 4 Nilai terkecil: 3: 5 Apakah 4 < 5? Ya, dapat indeks nilai terkecil: 4: 4 Menukar 5 dan 4 Memroses indeks: 4 Array: [1, 2, 3, 4, 5] Asumsi indeks nilai terkecil: 4: 5 Akan mulai lagi dari indeks: 5 Mencapai akhir array [1, 2, 3, 4, 5]
Mari contohkan lagi dengan ARRAY [5, 4, 3, 2, 1]: println(selection_sort_detail([5, 4, 3, 2, 1]))
Memroses indeks: 0 Array: [5, 4, 3, 2, 1] Asumsi indeks nilai terkecil: 0: 5 Akan mulai lagi dari indeks: 1 Indeks sekarang: 1: 4 Nilai terkecil: 0: 5 Apakah 4 < 5? Ya, dapat indeks nilai terkecil: 1: 4 Indeks sekarang: 2: 3 Nilai terkecil: 1: 4 Apakah 3 < 4? Ya, dapat indeks nilai terkecil: 2: 3 Indeks sekarang: 3: 2 Nilai terkecil: 2: 3 Apakah 2 < 3? Ya, dapat indeks nilai terkecil: 3: 2 Indeks sekarang: 4: 1 Nilai terkecil: 3: 2 Apakah 1 < 2? Ya, dapat indeks nilai terkecil: 4: 1 Menukar 5 dan 1 Memroses indeks: 1 Array: [1, 4, 3, 2, 5] Asumsi indeks nilai terkecil: 1: 4 Akan mulai lagi dari indeks: 2 Indeks sekarang: 2: 3 Nilai terkecil: 1: 4 Apakah 3 < 4? Ya, dapat indeks nilai terkecil: 2: 3 Indeks sekarang: 3: 2 Nilai terkecil: 2: 3 Apakah 2 < 3? Ya, dapat indeks nilai terkecil: 3: 2 Indeks sekarang: 4: 5 Nilai terkecil: 3: 2 Apakah 5 < 2? Tidak Menukar 4 dan 2 Memroses indeks: 2 Array: [1, 2, 3, 4, 5] Asumsi indeks nilai terkecil: 2: 3 Akan mulai lagi dari indeks: 3 Indeks sekarang: 3: 4 Nilai terkecil: 2: 3 Apakah 4 < 3? Tidak Indeks sekarang: 4: 5 Nilai terkecil: 2: 3 Apakah 5 < 3? Tidak Memroses indeks: 3 Array: [1, 2, 3, 4, 5] Asumsi indeks nilai terkecil: 3: 4 Akan mulai lagi dari indeks: 4 Indeks sekarang: 4: 5 Nilai terkecil: 3: 4 Apakah 5 < 4? Tidak Memroses indeks: 4 Array: [1, 2, 3, 4, 5] Asumsi indeks nilai terkecil: 4: 5 Akan mulai lagi dari indeks: 5 Mencapai akhir array [1, 2, 3, 4, 5]
Bagaimana menurut Anda perbandingan dengan insertion sort sebelumnya untuk contoh terakhir ini?
Untuk fungsi tanpa detil langkah, berikut adalah isi dari selection_sort:
var selection_sort = fn(a) { var n = len(a) var i = 0 repeat { var m = i var j = i + 1 repeat { if (j >= n) { return null } if (a[j] < a[m]) { var m = j } var j = j + 1 } if (m != i) { var t = a[i] set(a, i, a[m]) set(a, m, t) } var i = i + 1 if (i >= n) { return null } } return a }
Terima kasih telah membaca :)