快速排序
import java.util.Arrays;
public class QuickSort01 {
public static void main(String[] args) {
int[] arr = {2, 9, 3, 1, 8, 4};
quick(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quick(int[] arr, int low, int high){
if(low < high){
int index = getIndex(arr, low, high);
quick(arr, 0, index - 1);
quick(arr, index + 1, high);
}
}
public static int getIndex(int[] arr, int low, int high){
int temp = arr[low];
while (low < high){
while (low < high && arr[high] >= temp){
high --;
}
arr[low] = arr[high];
while (low < high && arr[low] <= temp){
low ++;
}
arr[high] = arr[low];
}
arr[low] = temp;
return low;
}
}
归并排序
import java.util.Arrays;
/**
* 归并排序
* 分治
* 合并
*/
public class BinaryMergSort {
public static void main(String[] args) {
int[] arr = {3, 5, 6, 1, 2, 7, 4, 9, 10};
megerSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void megerSort(int[] data, int left, int right) {
// 分治
if (left < right) {
int mid = (left + right) / 2;
megerSort(data, left, mid);
megerSort(data, mid + 1, right);
merge(data, left, mid, right);
}
}
public static void merge(int[] data, int left, int mid, int right) {
int[] temp = new int[data.length];
// 左边第一个数位置
int point1 = left;
// 右边
int point2 = mid + 1;
int index = left;
while (point1 <= mid && point2 <= right) {
if (data[point1] <= data[point2]) {
temp[index] = data[point1];
index++;
point1++;
} else {
temp[index] = data[point2];
index++;
point2++;
}
}
while (point1 <= mid) {
temp[index++] = data[point1++];
}
while (point2 <= right) {
temp[index++] = data[point2++];
}
for (int i = left; i <= right; i++) {
data[i] = temp[i];
}
}
}