Mengambil jenis integer yang naik sebagai contoh, penjelasan singkat tentang proses penyortiran gelembung dua arah: Pertama -tama pindahkan angka maksimum dari depan ke belakang ke ujung, dan kemudian giliran memindahkan angka terkecil dari belakang ke depan ke depan dari depan Array. Penyortiran gelembung dua arah sedikit lebih baik daripada penyortiran gelembung tradisional, karena kedua ujung array disortir dengan baik selama penyortiran dua arah, kita hanya perlu memproses bagian tengah array, sementara satu arah, yaitu penyortiran gelembung tradisional, Hanya elemen di ekor. Meskipun telah sedikit meningkatkan efisiensi, ia tidak dapat secara signifikan meningkatkan efisiensi penyortirannya, yang ditentukan oleh proses dasar penyortiran gelembung. Atas dasar ini, ini telah ditingkatkan.
Kode sumber penyortiran gelembung dua arah:
Salinan kode adalah sebagai berikut:
paket com.zc.manythread;
impor java.util.random;
/**
* Jenis gelembung dua arah
* @Author saya
*
*/
Kelas Publik BBSORT {
// Algoritma gelembung dua arah sangat mengurangi berapa kali penyortiran loop
Public int [] sort (int [] a) melempar pengecualian {
int j;
batas int = a.length;
int st = -1;
while (st <limit) {
// ST dan batas harus ditetapkan, jika tidak jika array dipesan dari awal
ST ++;
membatasi--;
boolean bertukar = false;
// Loop pertama menempatkan nilai maksimum ke akhir
untuk (j = st; j <limit; j ++) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
bertukar = true;
}
}
if (! swapped) {
mengembalikan a;
}kalau tidak {
bertukar = false;
// Loop kedua menempatkan nilai minimum di awal
untuk (j = limit; --j> = st;) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
bertukar = true;
}
}
if (! swapped) {
mengembalikan a;
}
}
}
mengembalikan a;
}
private static int [] createTate (int count) {
/**
* Tidak ada array duplikat
*/
int [] data = int new [count];
Rand acak = acak baru ();
boolean [] bool = boolean baru [100];
int num = 0;
untuk (int i = 0; i <count; i ++) {
Mengerjakan {
// Jika nomor yang dihasilkannya sama, terus loop
num = rand.nextint (100);
} while (bool [num]);
bool [num] = true;
/* list.add (num);* /// daftar daftar
data [i] = num;
}
pengembalian data;
}
public static void main (string [] args) {
Hitung int akhir = 10;
int [] data = createdate (count);
untuk (int n: data) {
System.out.print (n+"/t");
}
System.out.println ();
BSROT BSROT = BSROT baru (data);
mencoba {
int [] a = bsrot.sort (data);
untuk (int n: a) {
System.out.print (n+"/t");
}
} catch (Exception e) {
// TODO Blok tangkapan yang dihasilkan otomatis
e.printstacktrace ();
}
}
}
Hasil Menjalankan: