package sort;
import java.util.Arrays;
public class SortUtils {
public static void main(String[] args) {
int[] arr = { 54, 26, 93, 17, 77, 31, 44, 55, 20 };
// bubbleSort(arr);
// travel(arr);
// selectSort(arr);
// travel(arr);
// quickSort(arr, 0, arr.length-1);
// travel(arr);
// insertSort(arr);
// travel(arr);
// shellSort(arr);
// travel(arr);
travel(mergeSort(arr));
}
public static void travel(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
// 归并排序
public static int[] mergeSort(int[] arr) {
while (arr.length <= 1) {
return arr;
}
// 二分分解
int mid = arr.length / 2;
int[] left = mergeSort(Arrays.copyOfRange(arr, 0, mid));
int[] right = mergeSort(Arrays.copyOfRange(arr, mid, arr.length));
// 合并
int[] result = new int[arr.length];
int i = 0, l = 0, r = 0;
while (l < left.length && r < right.length) {
if (left[l] < right[r]) {
result[i++] = left[l++];
} else {
result[i++] = right[r++];
}
}
while (l < left.length) {
result[i++] = left[l++];
}
while (r < right.length) {
result[i++] = right[r++];
}
return result;
}
// 希尔排序
public static void shellSort(int[] arr) {
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
for (int i = gap; i < arr.length; i++) {
for (int j = i; j >= gap; j -= gap) {
if (arr[j] < arr[j - gap]) {
int temp = arr[j];
arr[j] = arr[j - gap];
arr[j - gap] = temp;
}
}
}
}
}
// 快速排序
public static void quickSort(int[] arr, int first, int last) {
if (first >= last) {
return;
}
int midValue = arr[first];
int low = first;
int high = last;
while (low < high) {
while (low < high && arr[high] >= midValue) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] < midValue) {
low++;
}
arr[high] = arr[low];
}
arr[low] = midValue;
quickSort(arr, first, low - 1);
quickSort(arr, low + 1, last);
}
// 插入排序
public static void insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j - 1] > arr[j]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
} else {
break;
}
}
}
}
// 选择排序
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
// 冒泡排序
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
}
}