Collections.sort ()
Penyortiran Java dapat diimplementasikan dengan CollectileOs.sort ().
Ada dua metode untuk mengurutkan daftar dengan Metode Collections.
Yang pertama adalah objek dalam daftar untuk mengimplementasikan antarmuka yang sebanding, sebagai berikut:
/*** Urutkan Pengguna Menurut Pesanan*/Kelas Public mengimplementasikan <user> {name string privat; name;} public integer getRder () {return order;} public void setorder (integer order) {this.order = order;} public int compareto (pengguna arg0) {rn this.getorder (). );}} Tes:
Tes kelas publik {public static void main (string [] art) {user user1 = new user (); ); (Daftar); untuk (Pengguna U: Daftar) {System.out.println (u.getName ());}} Hasil output adalah sebagai berikut
AB
Metode kedua adalah untuk mencapai berdasarkan metode pemuatan koleksi.sort, seperti ::
/*** Urutkan pengguna sesuai pesanan*/Pengguna kelas publik {// tidak perlu mengimplementasikan antarmuka yang sebanding. Return order;} public void setorder (integer order) {this.order = order;}}} Tulis di kelas utama ::
Tes kelas publik {public static void main (string [] art) {user user1 = new user (); Daftar User2.seter (2); Int Bandingkan (pengguna arg0, arg1) {return arg0.getorder (). getName ());}}} Hasil output adalah sebagai berikut
AB
Struktur kode sebelumnya sederhana, tetapi hanya dapat diurutkan sesuai dengan atribut tetap.
Pilih yang terbaik.
Algoritma penyortiran umum
Mari kita lihat praktik kode java dengan beberapa algoritma penyortiran klasik:
Penyortiran gelembung
Public static void bubblesort (int a [], int n) {int i, j; for (i = 0; i <n -1; i ++) {for (j = 0; j <n -i -1; j ++) {if (a [j]> a [j + 1]) {a [j] = a [j] ^ a [j + 1]; [j + 1]; a [j] = a [j] ^ a [j + 1];}}}Langsung menyisipkan sort
Public static void insertSort (int a [], int n) {int i, j, tmp; untuk (i = 1; i <n; i ++) {tmp = a [i]; untuk (j = i -1 ; ;}}}Pilih secara langsung
Public static void selectsort (int a [], int n) {int i, j, local; n; [loc] = a [i] ^ a [loc];Penyortiran
/ ** * Sortir heap (dari kecil ke besar) * * * @param a * @param n */ heapsort void public static (int a [], int n) {int tmp; n); 0, j);}} / ** * Bangun banyak akar * * * * * @param a * @param n * / private static void buildmaxheap (int a [], int n) {untuk (int i = ( n -2) / 2; i> = 0; I * @param n * / private static void maxheapify (int a [], int i, int n) {int kiri, kanan, lokal; i + 2; ;} if (loc! = i) {a [i] = a [loc] ^ a [i]; a [loc] = a [loc] ^ a [i]; a [i];} else {break;}}}Penyortiran cepat
Public static void quicksort (int a [], int bt, int ed) {if (bt <ed) {int pivot = pivotputition (a, bt, ed); 1, ed);}} private static void swapvar (int a [], int bt, int ed) {int mid = bt + (ed -bt) / 2; ) bt] = a [bt] ^ a [mid]; Bt, int ed) {// ambil nilai menengah sebagai dudukan untuk mencegah array dalam penampilan tertib o (n^2) Situasi Swapvar (a, bt, ed); Ed) {while (bt <ed && a [ed]> = stand) {ed-;} if (bt <ed) {a [bt ++] = a [ed]; bt ++;} if (bt <ed) {a [eds ---] = a [bt];} [bt] = state;Menggabungkan
Public static void mergeSort (int a [], int bt, int ed) {if (bt <ed) {int mid = bt + (ed -bt) / 2; Ed); ; = A [j]) {tmp [k] = a [i ++];} else {tmp [k] = a [j ++];} while (j <= ed) {tmp [k ++ ] = a [j ++];} untuk (i = 0; i <k; i ++) {a [bt+i] = tmp [i];}}Program Uji
Datang dan rangkum algoritma di atas:
Impor Java.util.Scanner; cin.nextint (); a = int [n]; ; ** * Gabungkan Sort * * * @param a * @param bt * @param eds * / public static void memort (int a [], int bt, int ed) {if <ed) {int mid = bt + (ed -Bt) / 2; param bt * @param mid * @param ed */ private static void mergearray (int a [], int bt, int mid, int ed) {int i, j, k, k, len = ed -bt + 1; Tmp [] = int baru [len]; <= a [j]) {tmp [k] = a [i ++];} else {tmp [k] = a [j ++];}} while (i <= mid) {tmp [k ++ ] = A [i ++];} while (j <= ed) {tmp [k ++] = a [j ++];} untuk (i = 0; i <k; i ++) {a [ bt+i] = tmp [i];} / ** * Sortir dengan cepat * * @param a * @param bt * @param ed * / public static void quicksort (int a [], int bt, int ed) { If (bt <ed) {int pivot) = pivotpartition (a, bt, ed); a [], int bt, int ed) {int mid = bt + (ed -bt) / 2; ] = a [bt] [mid]; param eds * @return */ private static int pivotpartition (int a [], int bt, int ed) {// ambil nilai menengah sebagai dudukan untuk mencegah array dalam penampilan tertib o (n^2) swapvar (a, bt, ed); int stand = a [bt]; +] = a [ed];} while (bt <ed && a [bt] <= stand) {bt ++;} if (bt <ed) {a [eds ---] = a [bt];} a [bt] = stand; ) {int tmp; // Buat tumpukan besar BuiltMaxHeap (a, n); [j]; a [j] = tmp; [], int n) {for (int i = (n -2) / 2; i> = 0; i-) {maxheapify (a, i, n);} / ** * pemeliharaan tumpukan maksimum pemeliharaan mulai Dari tawaran i * * * @param a * @param n * / private static void maxheapify (int a [], int i, int n) {int kiri, kanan, lokal; 2 * i + 1; ] {i = benar;} if (loc! = i) {a [a) i] = a [loc] ^ a [i]; i] = a [loc] ^ a [i];} else {break;}}}}} / ** * Pilih penyortiran secara langsung * * * @param a * @param n * / public static void selectSort (int a [ ], int n) {int i, j, local; untuk (i = 0; i <n; i ++) {loc = i; (a [j] <a [loc]) {loc = j;}} if (loc! = i) {a) {a) [i] = a [i] ^ a [loc]; a [i] ^ a [loc]; (int a [], int n) {int i, j, tmp; untuk (i = 1; i <n; i ++) {tmp = a [i]; 0; urutkan * * * @param a * @param n * / public static void bubblesort (int a [], int n) {int i, j; (j = 0; j <n -i -1; j ++) {if (a [j]> a [j +1]) {a [a j] = a [j] ^ a [j + 1]; * @param a * / public static void printarr (int a []) {for (int i = 0; i <.length; i ++) {if (i == a.length -1) {System.out. printf ("%d/n", a [i]);} else {system.out.printf ("%d", a [i]);}}}}}