public class sort {
public static void main(String[] args) {
int[] init = {0, 0, 0, -1, -1, 4, -7, 8, 10, 10, 3, -2, 1345, -2345,};
// Arrays.stream(bubbleSort(init)).forEach(System.out::println);
// Arrays.stream(insertSort(init)).forEach(System.out::println);
// Arrays.stream(quickSort(init,0,init.length-1)).forEach(System.out::println);
// mergeSort(init, 0, init.length - 1);
// Arrays.stream(init).forEach(System.out::println);
}
/**
* 冒泡排序
* @param arr
* @return
*/
public static int[] bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
/**
* 插入排序
* @param arr
* @return
*/
public static int[] insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int insertVal = arr[i];
int index = i - 1;
while (index >= 0 && insertVal <= arr[index]) {
arr[index + 1] = arr[index];
index--;
}
arr[index + 1] = insertVal;
}
return arr;
}
/**
* 快速排序
* @param arr
* @param low
* @param high
* @return
*/
public static int[] quickSort(int[] arr, int low, int high) {
int start = low;
int end = high;
int key = arr[start];
while (end > start) {
while (end > start && arr[end] >= key) {
end--;
}
if (arr[end] <= key) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
while (end > start && arr[start] <= key) {
start++;
}
if (arr[start] >= key) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
if (start > low) quickSort(arr, low, start - 1);
if (end < high) quickSort(arr, end + 1, high);
return arr;
}
/**
* 归并排序
* @param arr
* @param left
* @param right
*/
public static void mergeSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int mid = left + (right-left) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
toMerge(arr, left, mid, right);
}
private static void toMerge(int[] arr, int left, int mid, int right) {
int temp[] = new int[arr.length];
int thirdRight = mid + 1;
int thirdLeft = left;
int tmp = left;
while (left <= mid && thirdRight <= right) {
if (arr[left] <= arr[thirdRight]) {
temp[thirdLeft++] = arr[left++];
} else {
temp[thirdLeft++] = arr[thirdRight++];
}
}
while (thirdRight <= right) {
temp[thirdLeft++] = arr[thirdRight++];
}
while (left <= mid) {
temp[thirdLeft++] = arr[left++];
}
while (tmp <= right) {
arr[tmp] = temp[tmp++];
}
}
}