色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java快速排序和歸并

周雨萌1年前6瀏覽0評論

Java中有兩種常用的排序算法:快速排序和歸并排序。它們都是基于分治思想,可以在較短時間內對大型數據集進行排序。

快速排序

快速排序是一種不穩定的排序算法,它的基本思路是選擇一個中間值,將數組分成兩個子數組,一個子數組的所有值都比中間值小,另一個子數組的所有值都比中間值大。然后遞歸地對子數組進行排序,最后將子數組合并起來。

public static void quickSort(int[] arr, int left, int right) {
if (left< right) {
int pivot = partition(arr, left, right);
quickSort(arr, left, pivot - 1);
quickSort(arr, pivot + 1, right);
}
}
private static int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left - 1;
for (int j = left; j< right; j++) {
if (arr[j]< pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[right];
arr[right] = temp;
return i + 1;
}

歸并排序

歸并排序是一種穩定的排序算法,它的基本思路是將數組劃分成若干個子數組,然后遞歸地對子數組進行排序,最后將子數組合并起來。對于兩個已排序的子數組,可以用雙指針的方法將它們合并。

public static void mergeSort(int[] arr, int left, int right) {
if (left< right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i<= mid && j<= right) {
if (arr[i]<= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i<= mid) {
temp[k++] = arr[i++];
}
while (j<= right) {
temp[k++] = arr[j++];
}
for (int p = 0; p< temp.length; p++) {
arr[left + p] = temp[p];
}
}

快速排序的平均時間復雜度為O(nlogn),最壞時間復雜度為O(n^2);歸并排序的平均時間復雜度為O(nlogn),最壞時間復雜度也為O(nlogn)。因為快速排序的實現比歸并排序簡單,所以在實際應用中更常用。