Kelas alat secara singkat dan jelas merangkum lima algoritma penyortiran Java: penyortiran cepat, penyortiran bukit, penyortiran penyisipan, penyortiran tumpukan, dan menggabungkan penyortiran. Tidak ada penjelasan untuk algoritma penyortiran ini dalam kode. Saya berharap untuk memeriksa instruksi yang relevan untuk bagian pemikiran sendiri. Di sini saya hanya akan meringkas algoritma ini untuk digunakan semua orang.
Sortir kelas publik {public static <anytype memperluas sebanding <? super anytype >> void insertonSort (anyType [] a) {insersionSort (a, 0, a.length - 1); } private static <anytype memperluas sebanding <? super anytype >> void insersionsort (anyType [] a, int kiri, int right) {int j; // Catat posisi digit berikut dari elemen pertama lebih kecil dari TMP untuk (int p = kiri; p <= kanan; p ++) {anytype tmp = a [p]; untuk (j = p; j> kiri && tmp.compareto (a [j - 1]) <0; j--) {a [j] = a [j - 1]; } a [j] = tmp; }} public static <anyType memperluas sebanding <? super anytype >> void shellsort (anyType [] arr) {int j; untuk (int gap = arr.length / 2; gap> 0; gap / = 2) {for (int i = gap; i <arr.length; i ++) {anyType tmp = arr [i]; untuk (j = i; j> = gap && tmp.compareto (arr [j - gap]) <0; j - = gap) {arr [j] = arr [j - gap]; } arr [j] = tmp; }}} private static int leftChild (int i) {return i * 2 + 1; } private static <anytype memperluas sebanding <? super anytype >> void perculatedown (anyType [] arr, int i, int size) {anytype tmp = arr [i]; untuk (int child; (anak = kiri (i)) <size; i = anak) {if (anak! = ukuran - 1 && arr [anak] .compareto (arr [anak+1]) <0) {anak ++; } if (tmp.compareto (arr [anak]) <0) {arr [i] = arr [anak]; } else {break; }} arr [i] = tmp; } public static <anytype memperluas sebanding <? super anytype >> void heapsort (anyType [] arr) {for (int i = arr.length / 2; i> = 0; i--) {perkulatedown (arr, i, arr.length); } untuk (int i = arr.length-1; i> = 0; i--) {swapreferences (arr, 0, i); Perculatedown (arr, 0, i); }} private static <anyType memperluas sebanding <? super anytype >> void swapreferences (anyType [] arr, int i, int j) {anytype tmp = arr [i]; arr [i] = arr [j]; arr [j] = tmp; } public static <anytype memperluas sebanding <? super anytype >> void mergeSort (anyType [] arr) {anyType [] tmp = ((anyType []) baru sebanding [arr.length]); mergeSort (arr, 0, arr.length - 1, tmp); } private static <anytype memperluas sebanding <? super anytype >> void mergeSort (anyType [] arr, int start, int end, anyType [] tmp) {if (start <end) {int mid = (start + end) >> 1; Mergesort (ARR, Start, Mid, TMP); mergeSort (ARR, Mid + 1, End, TMP); gabungan (arr, start, mid, end, tmp); }} private static <anyType memperluas sebanding <? super anytype >> void merge (anyType [] arr, int start, int mid, int end, anyType [] tmp) {int i = start, j = mid + 1, k = start; while (i <= mid && j <= end) {if (arr [i] .compareto (arr [j]) <0) {tmp [k ++] = arr [i ++]; } else {tmp [k ++] = arr [j ++]; }} while (i <= mid) {tmp [k ++] = arr [i ++]; } while (j <= end) {tmp [k ++] = arr [j ++]; } untuk (int m = start; m <= end; m ++) {arr [m] = tmp [m]; }} public static <anyType memperluas sebanding <? super anytype >> void quicksort (anyType [] arr) {quicksort (arr, 0, arr.length - 1); } private static <anytype memperluas sebanding <? super anytype >> void quicksort (anyType [] arr, int left, int right) {if (kiri + length_diff <= kanan) {anyType pivot = medium (arr, kiri, kanan); int i = kiri, j = kanan; while (true) {while (arr [++ i] .compareto (pivot) <0); while (arr [-j] .compareto (pivot)> 0); if (i <j) {swapreferences (arr, i, j); } else {break; }} swapreferences (arr, i, kanan); quicksort (arr, kiri, i - 1); quicksort (arr, i + 1, kanan); } else {insersionsort (arr, kiri, kanan); }} private static <anyType memperluas sebanding <? super anytype >> anyType medium (anyType [] arr, int int, int right) {int center = (kiri + kanan) / 2; if (arr [center] .compareto (arr [kiri]) <0) {swapreferences (arr, center, kiri); } if (arr [kiri] .compareto (arr [kanan])> 0) {swapreferences (arr, kiri, kanan); } if (arr [center] .compareto (arr [kanan]) <0) {swapreferences (arr, center, right); } return arr [kanan]; } private final static int length_diff = 20;}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.