Kaedah dan teknik untuk mengoptimumkan fungsi isihan pantas Java
Quicksort (Quicksort) ialah algoritma pengisihan biasa Ideanya adalah untuk mencapai pengisihan dengan membahagikan tatasusunan kepada dua sub-tatasusunan, lebih kecil dan lebih besar, dan kemudian Isih sub-susurari. sekali lagi untuk mencapai pesanan keseluruhan. Dalam aplikasi praktikal, kita perlu mengoptimumkan prestasi fungsi isihan pantas untuk meningkatkan kecekapan pengisihan. Berikut akan memperkenalkan beberapa kaedah dan teknik untuk mengoptimumkan fungsi isihan pantas, dan memberikan contoh kod khusus.
Berikut ialah contoh kod untuk memilih elemen asas secara rawak:
public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivotIndex = randomPartition(arr, low, high); quickSort(arr, low, pivotIndex - 1); quickSort(arr, pivotIndex + 1, high); } } public static int randomPartition(int[] arr, int low, int high) { int randomIndex = ThreadLocalRandom.current().nextInt(low, high + 1); swap(arr, randomIndex, high); return partition(arr, low, high); } public static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(arr, i, j); } } swap(arr, i + 1, high); return i + 1; } public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { int[] arr = {5, 9, 1, 3, 7, 6}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } }
Idea asas pembahagian tiga persampelan ialah memilih tiga elemen dalam tatasusunan (seperti elemen pertama, terakhir dan pertengahan), dan kemudian menggunakan mediannya sebagai elemen asas. Dengan menggunakan kaedah pembahagian sebegini, kita boleh cuba mengelakkan masalah kemerosotan prestasi dengan cepat apabila berurusan dengan sejumlah besar elemen berulang.
Berikut ialah contoh kod menggunakan pembahagian tiga pensampelan:
public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int[] pivotIndices = medianOfThree(arr, low, high); int left = pivotIndices[0]; int right = pivotIndices[1]; quickSort(arr, low, left - 1); quickSort(arr, left + 1, right - 1); quickSort(arr, right + 1, high); } } public static int[] medianOfThree(int[] arr, int low, int high) { int mid = (low + high) / 2; if (arr[high] < arr[low]) { swap(arr, low, high); } if (arr[mid] < arr[low]) { swap(arr, low, mid); } if (arr[high] < arr[mid]) { swap(arr, mid, high); } swap(arr, mid, high - 1); return partition(arr, low + 1, high - 1); } public static int[] partition(int[] arr, int low, int high) { int left = low; int right = high; int pivot = arr[high]; int i = low - 1; while (true) { while (arr[++i] < pivot) { } while (left < right && pivot < arr[--right]) { } if (left >= right) { break; } swap(arr, left, right); } swap(arr, left, high); return new int[]{left, right}; } public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { int[] arr = {5, 9, 1, 3, 7, 6}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } }
Dengan memilih unsur asas secara rawak dan menggunakan kaedah pembahagian tiga pensampelan, kami boleh mengoptimumkan prestasi fungsi isihan pantas Java. Kaedah ini boleh meningkatkan kecekapan pengisihan algoritma apabila berurusan dengan pengagihan data yang berbeza dan mengelakkan kemerosotan kerumitan masa.
Atas ialah kandungan terperinci Strategi dan teknik untuk meningkatkan kecekapan fungsi isihan pantas Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!