Seleksi Menyortir Java Program dengan Contoh

โšก Ringkasan Cerdas

Pengurutan seleksi dalam Java Berulang kali memindai bagian array yang belum diurutkan, menemukan nilai terkecil yang tersisa, dan menukarnya ke posisi yang tepat, menyelesaikan pekerjaan dengan paling banyak n-1 pertukaran terlepas dari urutan input.

  • ๐Ÿ”˜ Definisi: Algoritma selection sort membagi array menjadi wilayah yang sudah diurutkan dan wilayah yang belum diurutkan pada setiap proses.
  • โ˜‘๏ธ Proses: Setiap proses pencarian dilakukan pada wilayah yang belum diurutkan untuk menemukan elemen terendah dan menukarnya ke depan.
  • โœ… Program: The Java Contoh ini mengurutkan {860, 8, 200, 9} dan mencetak setiap perbandingan dan pertukaran.
  • ๐Ÿงช Kompleksitas: Kasus terbaik, rata-rata, dan terburuk semuanya berjalan dalam waktu O(nยฒ) karena jumlah perbandingan tidak pernah berkurang.
  • ๏ธ ะžะฟะตั€ะฐั‚ะธะฒะฝะฐั ะฟะฐะผัั‚ัŒ: Pertukaran terjadi di dalam array asli, sehingga ruang tambahan tetap O(1).
  • ๐Ÿ“Š Perilaku: Versi klasik tidak stabil, namun melakukan penulisan paling sedikit dibandingkan jenis kuadratik lainnya.

Seleksi Menyortir Java Program dengan Contoh

Bagaimana cara kerja Pengurutan Seleksi?

Pengurutan Seleksi mengimplementasikan algoritma pengurutan sederhana sebagai berikut:

  • Algoritma berulang kali mencari elemen terendah.
  • Tukar elemen saat ini dengan elemen yang memiliki nilai terendah
  • Dengan setiap iterasi/lulus dari jenis seleksi, elemen ditukar.

Oleh karena itu, setiap operan memperlakukan susunan sebagai dua wilayah: blok terurut yang tumbuh dari kiri dan blok tidak terurut yang menyusut di sebelah kanan. Algoritma ini menelusuri blok tidak terurut, mengingat indeks nilai terkecil yang ditemuinya, dan menukar nilai tersebut dengan posisi tidak terurut pertama.

Karena hanya terjadi satu pertukaran per putaran, sebuah array berisi n elemen akan diurutkan setelah paling banyak n-1 pertukaran. Sifat inilah yang membedakan rutinitas ini dari rutinitas tingkat pemula lainnya. Java algoritma pengurutan, yang memindahkan data jauh lebih sering.

The tracContoh di bawah ini mengikuti array sampel {860, 8, 200, 9} persis seperti yang dicetak oleh program di bagian selanjutnya saat dijalankan.

Lulus Perbandingan tercetak Nilai terkecil yang ditemukan Susunan setelah pertukaran
Start - - 860 8 200 9
1 860 dan 8, 8 dan 200, 8 dan 9 8 8 860 200 9
2 860 dan 200, 200 dan 9 9 8 9 200 860
3 200 dan 860 200 8 9 200 860

Dua detail dalam hal itu tracAda beberapa hal yang perlu diperhatikan. Pertama, pada pass 3 masih dilaporkan terjadi pertukaran meskipun urutannya tidak berubah, karena nilai terkecil yang tersisa sudah berada di indeks saat ini dan program menukar elemen tersebut dengan dirinya sendiri. Kedua, jumlah perbandingan berkurang satu pada setiap pass (tiga, kemudian dua, lalu satu), yang merupakan pola di balik angka kompleksitas di bagian bawah halaman ini.

Java Program untuk mengimplementasikan Seleksi Seleksi

Kelas di bawah ini bernama SelectionSortAlgo dan berada di dalam paket com.guru99. Metode main() mendeklarasikan array sampel, mencetaknya, menyerahkannya ke selection() untuk diurutkan, dan mencetaknya lagi. Fungsi bantu printArray() menulis semua elemen pada satu baris, yang menghasilkan log langkah demi langkah yang mudah dibaca.

Di dalam fungsi selection(), loop terluar menandai batas antara wilayah yang sudah diurutkan dan yang belum diurutkan, variabel index menyimpan posisi nilai terkecil yang telah dilihat sejauh ini, dan tiga penugasan di akhir setiap proses melakukan pertukaran.

package com.guru99;
 
public class SelectionSortAlgo {
 
	public static void main(String a[])
	{  
		int[] myArray = {860,8,200,9}; 
		
		System.out.println("------Before Selection Sort-----");
 
		printArray(myArray);
 
 
		selection(myArray);//sorting array using selection sort  
 
		System.out.println("-----After Selection Sort-----");  
 
		printArray(myArray); 
	} 
	
		public static void selection(int[] array)
	{  
		for (int i = 0; i < array.length - 1; i++)  
		{  System.out.println("Sort Pass Number "+(i+1));
			int index = i;  
			for (int j = i + 1; j < array.length; j++)
			{   
			    System.out.println("Comparing "+ array[index]  + " and " + array[j]);  
				if (array[j] < array[index]){ 
				System.out.println(array[index]  + " is greater than " + array[j] );
					index = j;
				
				
				}  
			}  
 
			int smallerNumber = array[index];   
			array[index] = array[i];  
			array[i] = smallerNumber;  
			System.out.println("Swapping Elements: New Array After Swap");
			printArray(array);
		}  
	}  
	static void printArray(int[] array){
	    
	    for(int i=0; i < array.length; i++)
		{  
			System.out.print(array[i] + " ");  
		} 
	    System.out.println();
	    
	}
 
}

Keluaran:

Mengkompilasi dan menjalankan kelas tersebut menghasilkan log konsol di bawah ini, dengan satu blok keluaran per proses.

------Before Selection Sort-----
860 8 200 9 
Sort Pass Number 1
Comparing 860 and 8
860 is greater than 8
Comparing 8 and 200
Comparing 8 and 9
Swapping Elements: New Array After Swap
8 860 200 9 
Sort Pass Number 2
Comparing 860 and 200
860 is greater than 200
Comparing 200 and 9
200 is greater than 9
Swapping Elements: New Array After Swap
8 9 200 860 
Sort Pass Number 3
Comparing 200 and 860
Swapping Elements: New Array After Swap
8 9 200 860 
-----After Selection Sort-----
8 9 200 860

Dua masalah yang sering menjebak pemula saat menjalankan contoh ini untuk pertama kalinya. Karena file tersebut mendeklarasikan package com.guru99;, sumbernya harus berada di tempat yang sesuai com/guru99 direktori, jika tidak, kompiler akan melaporkan ketidakcocokan nama paket atau kelas. Kelas tersebut kemudian harus dijalankan dengan nama lengkapnya, java com.guru99.SelectionSortAlgo, karena polos java SelectionSortAlgo Menimbulkan NoClassDefFoundError.

Batas loop adalah jebakan umum lainnya. Loop terluar berhenti di array.length - 1 dan lingkaran dalam dimulai pada i + 1; mengubah salah satu batas akan menghasilkan proses kosong tambahan atau ArrayIndexOutOfBoundsException.

Kompleksitas Waktu dan Ruang dari Pengurutan Seleksi

Loop dalam program selalu berjalan hingga akhir array, sehingga algoritma melakukan jumlah perbandingan yang sama terlepas dari bentuk datanya. Untuk array dengan n elemen, totalnya adalah n(n-1)/2, yang untuk sampel empat elemen sama dengan enam, dan output di atas memang mencetak tepat enam baris "Comparing".

Kasus Perbandingan swap Kompleksitas waktu Ruang tambahan
Terbaik (array sudah diurutkan) n(n-1)/2 n-1 HAI(nยฒ) O (1)
Rata-rata (urutan acak) n(n-1)/2 n-1 HAI(nยฒ) O (1)
Terburuk (diurutkan terbalik) n(n-1)/2 n-1 HAI(nยฒ) O (1)

Tiga konsekuensi berikut muncul dari deretan angka yang seragam tersebut:

  • Algoritma pengurutan seleksi tidak adaptif. Input yang diurutkan membutuhkan biaya yang sama persis dengan input yang dibalik, sehingga tidak ada jalan pintas keluar lebih awal seperti yang diharapkan. semacam gelembung menawarkan.
  • Jumlah pertukaran adalah keunggulan utama algoritma ini. Paling banyak hanya terjadi n-1 pertukaran, yang jauh lebih sedikit daripada jumlah pergerakan kuadratik yang dapat dilakukan oleh pengurutan sederhana lainnya.
  • Penggunaan memori bersifat konstan. Hanya penghitung loop dan dua variabel sementara index dan smallerNumber yang dibutuhkan, sehingga ruang tambahan adalah O(1) dan pengurutan terjadi di tempat.

Pertumbuhan kuadratik adalah batas praktisnya. Menggandakan ukuran array kira-kira melipatgandakan pekerjaan perbandingan, sehingga pengurutan seleksi lebih cocok untuk pengajaran, array kecil, dan kode tertanam daripada kumpulan data produksi, di mana algoritma O(n log n) adalah pilihan yang tepat.

Keuntungan dan Kerugian dari Metode Pengurutan Seleksi

Memahami di mana algoritma membantu dan di mana ia merugikan akan memudahkan pengambilan keputusan kapan penggunaan algoritma tersebut tepat.

Kelebihan

  • Logikanya singkat dan mudah dibaca, itulah sebabnya ini menjadi latihan pengurutan pertama yang standar. jenis penyisipan.
  • Algoritma ini melakukan pengurutan di tempat, sehingga tidak ada array kedua yang dialokasikan dan penggunaan memori tidak bertambah seiring dengan input.
  • Ia melakukan paling banyak n-1 penulisan ke array, yang penting pada penyimpanan di mana penulisan lambat atau menyebabkan keausan media.
  • Waktu eksekusinya sepenuhnya dapat diprediksi, karena jumlah perbandingan hanya bergantung pada panjang array.

Kekurangan

  • Setiap kasus memiliki kompleksitas O(nยฒ), sehingga algoritma ini tidak dapat diterapkan pada koleksi data yang besar.
  • Ia tidak dapat mendeteksi array yang sudah diurutkan dan oleh karena itu tidak pernah selesai lebih awal.
  • Bentuk klasik yang ditunjukkan di atas tidak stabil, sehingga dua nilai yang sama mungkin akan berakhir dalam urutan yang berlawanan.
  • Algoritma ini membandingkan data lebih sering daripada insertion sort pada data yang hampir terurut, di mana insertion sort mendekati waktu linear.

Singkatnya, pilih pengurutan seleksi (selection sort) ketika array berukuran kecil dan setiap penulisan memakan biaya yang besar, dan hindari pengurutan seleksi ketika kumpulan data berukuran besar atau sudah hampir terurut.

Pengurutan Seleksi vs. Bubble Sort vs Insertion Sort

Ketiga algoritma tersebut merupakan pengurutan perbandingan kuadratik di tempat, namun perilakunya berbeda begitu bentuk input berubah.

Kriterium Sortir seleksi Bubble sort Jenis penyisipan
Waktu terbaik HAI(nยฒ) O (n) O (n)
Waktu rata-rata dan waktu terburuk HAI(nยฒ) HAI(nยฒ) HAI(nยฒ)
Pertukaran atau pergeseran dalam skenario terburuk pertukaran n-1 n(n-1)/2 pertukaran Hingga n(n-1)/2 pergeseran
Stabil Tidak Ya Ya
Adaptif terhadap input yang sudah diurutkan Tidak Ya Ya
Ruang tambahan O (1) O (1) O (1)
Penggunaan khas Paling sedikit tulisan yang dibutuhkan Mengajar dan mengidentifikasi data yang diurutkan Array kecil atau hampir terurut

Tabel tersebut menjelaskan jawaban umum dalam wawancara. Selection sort unggul dalam jumlah pertukaran, bubble sort unggul dalam mengenali input yang sudah terurut, dan insertion sort biasanya yang tercepat dari ketiganya dalam praktiknya karena data sebenarnya sering kali sebagian sudah terurut. Tak satu pun dari mereka dapat menyaingi merge sort atau quicksort setelah array bertambah melebihi beberapa lusin elemen.

Pertanyaan Umum Demo Slot

Setelah n-1 putaran, wilayah yang belum diurutkan hanya berisi satu elemen, dan elemen tunggal tersebut sudah berada di tempat yang tepat. Menjalankan satu putaran lagi tidak akan membandingkan apa pun, sehingga batasan perulangan menghindari iterasi yang sia-sia.

Asisten AI dapat menarasikan setiap tahapan dalam kata-kata, membangun susunan pengujian tambahan, dan menghitung perbandingan untuk input tertentu. Gunakan penjelasan ini sebagai alat bantu belajar dan konfirmasikan klaim kompleksitas apa pun dengan buku teks sebelum mengutipnya.

Ya. Kopilot GitHub Melengkapi metode dari tanda tangan atau komentar. Periksa sendiri awal loop dalam dan baris pertukaran, karena versi yang dihasilkan terkadang melakukan pertukaran dengan i daripada dengan indeks minimum yang tersimpan.

Versi yang ditampilkan di sini tidak stabil, karena pertukaran jarak jauh dapat menyebabkan satu nilai yang sama melewati nilai yang sama lainnya. Shiftmengubah blok elemen alih-alih menukarnyaping Mempertahankan urutan asli kunci yang sama, dengan mengorbankan penulisan tambahan.

Reverse Perbandingan di dalam loop dalam. Menguji apakah array[j] lebih besar dari array[index] tracks adalah nilai terbesar yang tersisa, sehingga setiap proses menggeser nilai maksimum ke depan dan array yang sudah jadi berjalan dari tinggi ke rendah.

Ya. Metode rekursif menemukan nilai minimum dari sub-array saat ini, menukarnya ke depan, lalu memanggil dirinya sendiri pada sisanya. Jumlah perbandingan tidak berubah, tetapi tumpukan panggilan menambahkan ruang O(n), sehingga bentuk perulangan lebih disukai.

Kesalahan yang sering terjadi adalah lupa mengatur ulang indeks ke i di awal setiap putaran, memulai loop dalam pada i alih-alih i + 1, dan melakukan pertukaran.ping array[j] daripada array[index], yang menyebabkan kerugian track dengan nilai terkecil.

Tidak. Arrays.sort() menerapkan quicksort dual-pivot pada tipe data primitif dan TimSort pada objek, dengan pengurutan gaya penyisipan pada partisi kecil. Selection sort muncul dalam materi pengajaran dan kode yang ditulis tangan, bukan dalam pustaka standar.

Ringkaslah postingan ini dengan: