1.归并排序
package com.desmond.codebase.algorithm.sorting;
public class MergeSort {
public static void main(String[] args) {
Integer[] arr = {11, 8, 3, 9, 7, 1, 2, 5};
mergeSort(arr);
Sort.print(arr);
}
public static void mergeSort(Integer[] arr) {
mergeSortIntenal(arr, 0, arr.length - 1);
}
public static void mergeSortIntenal(Integer[] arr, int p, int r) {
if(p >= r) {
return;
}
int q = p/2 + r/2;
mergeSortIntenal(arr, p, q);
mergeSortIntenal(arr, q + 1, r);
merge(arr, p, q, r);
}
public static void merge(Integer[] arr, int p, int q, int r) {
Integer[] tmpArr = new Integer[r-p+1];
int i = p, j = q+1, k = 0;
while (i <=q && j<=r) {
if(arr[i] < arr[j]) {
tmpArr[k++] = arr[i++];
} else {
tmpArr[k++] = arr[j++];
}
}
int start = i;
int end = q;
if(j <= r) {
start = j;
end = r;
}
while (start <= end) {
tmpArr[k++] = arr[start++];
}
for(i=0; i<=r-p; i++) {
arr[i+p] = tmpArr[i];
}
}
}
2.快速排序
package com.desmond.codebase.algorithm.sorting;
public class QuickSort {
public static void main(String[] args) {
Integer[] arr = {7,6,6,5,9,8};
quickSort(arr);
Sort.print(arr);
}
public static void quickSort(Integer[] arr) {
quickSortC(arr, 0, arr.length - 1);
}
private static void quickSortC(Integer[] arr, int p, int r) {
if(p >= r) {
return;
}
int q = partition(arr, p, r);
quickSortC(arr, p, q - 1);
quickSortC(arr, p + 1, r);
}
private static int partition(Integer[] arr, int p, int r) {
int pivot = arr[r];
int i=p;
for(int j=p; j<=r; j++) {
if(arr[j] < pivot) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
}
}
int tmp = arr[i];
arr[i] = arr[r];
arr[r] = tmp;
return i;
}
}