Bubble Sortir Algoritma dengan Python menggunakan Daftar Contoh

Apa itu Bubble Urutkan?

Bubble Urutkan adalah algoritma pengurutan yang digunakan untuk mengurutkan item daftar dalam urutan menaik dengan membandingkan dua nilai yang berdekatan. Jika nilai pertama lebih tinggi dari nilai kedua, maka nilai pertama menempati posisi nilai kedua, sedangkan nilai kedua menempati posisi nilai pertama. Jika nilai pertama lebih rendah dari nilai kedua, maka tidak dilakukan pertukaran.

Proses ini diulangi hingga semua nilai dalam daftar telah dibandingkan dan ditukar jika perlu. Setiap iterasi biasanya disebut pass. Jumlah lintasan dalam bubble sort sama dengan jumlah elemen dalam daftar dikurangi satu.

Dalam Bubble Menyortir Python tutorial Anda akan belajar:

Menerapkan Bubble Sortir Algoritma

Kami akan membagi implementasinya menjadi tiga (3) langkah, yaitu masalah, solusi, dan algoritma yang dapat kita gunakan untuk menulis kode untuk bahasa apa pun.

Masalahnya

Daftar item diberikan dalam urutan acak, dan kami ingin mengatur item secara teratur

Pertimbangkan daftar berikut ini:

[21,6,9,33,3]

Solusinya

Ulangi daftar yang membandingkan dua elemen yang berdekatan dan menukarnya jika nilai pertama lebih tinggi dari nilai kedua.

Hasilnya harus sebagai berikut:

[3,6,9,21,33]

Algoritma

Algoritma pengurutan gelembung bekerja sebagai berikut

Langkah 1) Dapatkan jumlah total elemen. Dapatkan jumlah total item dalam daftar yang diberikan

Langkah 2) Tentukan banyaknya lintasan luar (n – 1) yang harus dilakukan. Panjangnya adalah daftar dikurangi satu

Langkah 3) Lakukan lintasan dalam (n – 1) kali untuk lintasan luar 1. Dapatkan nilai elemen pertama dan bandingkan dengan nilai kedua. Jika nilai kedua lebih kecil dari nilai pertama, maka tukar posisinya

Langkah 4) Ulangi langkah 3 lintasan hingga Anda mencapai lintasan terluar (n – 1). Dapatkan elemen berikutnya dalam daftar, lalu ulangi proses yang dilakukan pada langkah 3 hingga semua nilai ditempatkan dalam urutan menaik yang benar.

Langkah 5) Kembalikan hasilnya ketika semua lintasan telah dilakukan. Kembalikan hasil daftar yang diurutkan

Langkah 6) Optimalkan Algoritma

Hindari inner pass yang tidak perlu jika daftar atau nilai yang berdekatan sudah diurutkan. Misalnya, jika daftar yang disediakan sudah berisi elemen yang telah diurutkan dalam urutan menaik, maka kita dapat memutus perulangan lebih awal.

Dioptimalkan Bubble Sortir Algoritma

Secara default, algoritma untuk sortir gelembung di Python membandingkan semua item dalam daftar tanpa mempedulikan apakah daftar tersebut sudah diurutkan atau belum. Jika daftar yang diberikan sudah diurutkan, membandingkan semua nilai hanya akan membuang-buang waktu dan sumber daya.

Mengoptimalkan pengurutan gelembung membantu kita menghindari pengulangan yang tidak perlu serta menghemat waktu dan sumber daya.

Misalnya, jika item pertama dan kedua sudah diurutkan, maka tidak perlu mengulangi nilai lainnya. Iterasi dihentikan, dan iterasi berikutnya dimulai hingga proses selesai seperti yang ditunjukkan di bawah ini Bubble Urutkan contoh.

Optimasi dilakukan dengan menggunakan langkah-langkah berikut:

Langkah 1) Buat variabel flag yang memantau apakah ada pertukaran yang terjadi di loop dalam

Langkah 2) Jika nilai sudah bertukar posisi, lanjutkan ke iterasi berikutnya

Langkah 3) Jika manfaat belum bertukar posisi, akhiri putaran dalam, dan lanjutkan dengan putaran luar.

Pengurutan gelembung yang dioptimalkan lebih efisien karena hanya menjalankan langkah-langkah yang diperlukan dan melewatkan langkah-langkah yang tidak diperlukan.

Representasi Visual

Diberikan daftar berisi lima elemen, gambar berikut mengilustrasikan bagaimana pengurutan gelembung berulang melalui nilai saat mengurutkannya

Gambar berikut menunjukkan daftar yang tidak diurutkan

Representasi Visual

Iterasi Pertama

Langkah 1)

Representasi Visual

Nilai 21 dan 6 dibandingkan untuk memeriksa mana yang lebih besar dari yang lain.

Representasi Visual

21 lebih besar dari 6, jadi 21 menempati posisi yang ditempati 6 sedangkan 6 mengambil posisi yang ditempati 21

Representasi Visual

Daftar modifikasi kami sekarang terlihat seperti di atas.

Langkah 2)

Representasi Visual

Nilai 21 dan 9 dibandingkan.

Representasi Visual

21 lebih besar dari 9, jadi kita tukar posisi 21 dan 9

Representasi Visual

Daftar barunya sekarang seperti di atas

Langkah 3)

Representasi Visual

Nilai 21 dan 33 dibandingkan untuk mencari nilai yang lebih besar.

Representasi Visual

Nilai 33 lebih besar dari 21, sehingga tidak terjadi pertukaran.

Langkah 4)

Representasi Visual

Nilai 33 dan 3 dibandingkan untuk mencari nilai yang lebih besar.

Representasi Visual

Nilai 33 lebih besar dari 3, jadi kita tukar posisinya.

Representasi Visual

Daftar yang diurutkan pada akhir iterasi pertama adalah seperti di atas

Iterasi Kedua

Daftar baru setelah iterasi kedua adalah sebagai berikut

Representasi Visual

Iterasi Ketiga

Daftar baru setelah iterasi ketiga adalah sebagai berikut

Representasi Visual

Iterasi Keempat

Daftar baru setelah iterasi keempat adalah sebagai berikut

Representasi Visual

Python contoh

Kode berikut menunjukkan cara mengimplementasikan Bubble Sortir algoritma dalam Python.

def bubbleSort( theSeq ):
    n = len( theSeq )

    for i in range( n - 1 ) :
        flag = 0

        for j in range(n - 1) :
            
            if theSeq[j] > theSeq[j + 1] : 
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21,6,9,33,3] 

result = bubbleSort(el)

print (result)

Menjalankan program sortir gelembung di atas di Python menghasilkan hasil berikut

[6, 9, 21, 3, 33]

Penjelasan Kode

Penjelasan untuk Python Bubble Urutan kode program adalah sebagai berikut

Penjelasan Kode

SINI,

  1. Mendefinisikan fungsi bubbleSort yang menerima parameter theSeq. Kode tidak menghasilkan apa pun.
  2. Mendapatkan panjang array dan memberikan nilai ke variabel n. Kode tidak menghasilkan apa pun
  3. Memulai perulangan for yang menjalankan algoritma bubble sort (n – 1) kali. Ini adalah lingkaran luar. Kode tidak menghasilkan apa pun
  4. Mendefinisikan variabel flag yang akan digunakan untuk menentukan apakah swap telah terjadi atau tidak. Ini untuk tujuan optimasi. Kode tidak menghasilkan apa pun
  5. Memulai loop internal yang membandingkan semua nilai dalam daftar dari yang pertama hingga yang terakhir. Kode tidak menghasilkan apa pun.
  6. Menggunakan pernyataan if untuk memeriksa apakah nilai di sisi kiri lebih besar daripada nilai di sisi kanan. Kode tidak menghasilkan apa pun.
  7. Menetapkan nilai theSeq[j] ke variabel temporal tmp jika kondisi bernilai benar. Kode tidak menghasilkan apa pun
  8. Nilai Seq[j + 1] ditugaskan ke posisi Seq[j]. Kode tidak menghasilkan apa pun
  9. Nilai variabel tmp ditugaskan ke posisi Seq[j + 1]. Kode tidak menghasilkan apa pun
  10. Variabel flag diberi nilai 1 untuk menunjukkan bahwa pertukaran telah terjadi. Kode tidak menghasilkan apa pun
  11. Menggunakan pernyataan if untuk memeriksa apakah nilai flag variabel adalah 0. Kode tidak menampilkan apa pun
  12. Jika nilainya 0, maka kita memanggil pernyataan break yang keluar dari loop dalam.
  13. Mengembalikan nilai theSeq setelah diurutkan. Kode menampilkan daftar yang diurutkan.
  14. Mendefinisikan variabel el yang berisi daftar nomor acak. Kode tidak menghasilkan apa pun.
  15. Menetapkan nilai fungsi bubbleSort ke hasil variabel.
  16. Mencetak nilai hasil variabel.

Bubbldan memilah keuntungan

Berikut ini adalah beberapa keuntungan dari algoritma bubble sort

  • Mudah dimengerti
  • Ini berkinerja sangat baik ketika daftar sudah atau hampir diurutkan
  • Itu tidak memerlukan memori yang luas.
  • Sangat mudah untuk menulis kode untuk algoritma
  • Persyaratan ruang minimal dibandingkan dengan algoritma pengurutan lainnya.

Bubbldan urutkan Kekurangannya

Berikut ini adalah beberapa kelemahan dari algoritma bubble sort

  • Itu tidak berfungsi dengan baik ketika mengurutkan daftar besar. Ini membutuhkan terlalu banyak waktu dan sumber daya.
  • Ini sebagian besar digunakan untuk tujuan akademis dan bukan aplikasi dunia nyata.
  • Banyaknya langkah yang diperlukan untuk mengurutkan daftar adalah orde n2

Analisis Kompleksitas Bahasa Inggris Bubble Urutkan

Ada tiga jenis Kompleksitas yaitu:

1) Urutkan kompleksitas

Kompleksitas sort digunakan untuk menyatakan jumlah waktu eksekusi dan ruang yang dibutuhkan untuk mengurutkan daftar. Sortiran gelembung membuat (n – 1) iterasi untuk mengurutkan daftar, di mana n adalah jumlah total elemen dalam daftar.

2) Kompleksitas waktu

Kompleksitas waktu dari bubble sort adalah O(n2)

Kompleksitas waktu dapat dikategorikan sebagai:

  • Kasus terburuk – di sinilah daftar yang disediakan dalam urutan menurun. Algoritme melakukan jumlah eksekusi maksimum yang dinyatakan sebagai [Big-O] O(n2)
  • Kasus terbaik – ini terjadi ketika daftar yang diberikan sudah diurutkan. Algoritma melakukan jumlah eksekusi minimum yang dinyatakan sebagai [Big-Omega] Ω(n)
  • Kasus rata-rata – ini terjadi ketika daftar tersebut dalam urutan acak. Kompleksitas rata-rata direpresentasikan sebagai [Big-theta] ⊝(n2)

3) Kompleksitas ruang

Kompleksitas ruang mengukur jumlah ruang tambahan yang dibutuhkan untuk mengurutkan daftar. Pengurutan gelembung hanya memerlukan satu (1) ruang tambahan untuk variabel temporal yang digunakan untuk menukar nilai. Oleh karena itu, pengurutan gelembung memiliki kompleksitas ruang sebesar O (1).

Ringkasan

  • Algoritma bubble sort bekerja dengan membandingkan dua nilai yang berdekatan dan menukarnya jika nilai di sebelah kiri lebih kecil dari nilai di sebelah kanan.
  • Menerapkan algoritma bubble sort relatif mudah dengan Python. Yang perlu Anda gunakan hanyalah perulangan for dan pernyataan if.
  • Masalah yang dipecahkan oleh algoritma bubble sort adalah mengambil daftar item secara acak dan mengubahnya menjadi daftar terurut.
  • Algoritme pengurutan gelembung dalam struktur data bekerja paling baik ketika daftar sudah diurutkan karena melakukan jumlah iterasi yang minimal.
  • Algoritme pengurutan gelembung tidak bekerja dengan baik jika urutan daftarnya terbalik.
  • Jenis bubbler memiliki kompleksitas waktu O (n2) dan kompleksitas ruang O (1)
  • Algoritme pengurutan bubbler paling cocok untuk tujuan akademis dan bukan aplikasi dunia nyata.
  • Pengurutan gelembung yang dioptimalkan membuat algoritme lebih efisien dengan melewatkan iterasi yang tidak diperlukan saat memeriksa nilai yang telah diurutkan.