/**
* 插入排序
*
* @param arr
*/
public void insertSort(int[] arr) {
if (arr.length <= 1) return;
for (int i = 1; i < arr.length; i++) {
int preIndex = i - 1, current = arr[i];
while (preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
}
/**
* 冒泡排序
*
* @param arr
*/
public void bubbleSort(int[] arr) {
if (arr.length == 0) return;
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
/**
* 快速排序
*
* @param arr
* @param begin
* @param end
*/
public void quickSort(int[] arr, int begin, int end) {
if (begin >= end) return;
int pivot = partition(arr, begin, end);
quickSort(arr, begin, pivot - 1);
quickSort(arr, pivot + 1, end);
}
public int partition(int[] arr, int begin, int end) {
int pivot = end, count = begin;
for (int i = begin; i < end; i++) {
if (arr[i] < arr[pivot]) {
int tmp = arr[i];
arr[i] = arr[count];
arr[count] = tmp;
count++;
}
}
int tmp = arr[pivot];
arr[pivot] = arr[count];
arr[count] = tmp;
return count;
}
/**
* 归并排序
*
* @param arr
* @param left
* @param right
*/
public void mergeSort(int[] arr, int left, int right) {
if (arr.length <= 1) return;
if (right <= left) return;
int mid = (left + right) >> 1;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
/**
* 归并排序的合并
*
* @param arr
* @param left
* @param mid
* @param right
*/
public 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) {
temp[k++] = arr[i] >= arr[j] ? arr[i++] : arr[j++];
}
while (i <= mid) temp[k++] = arr[i++];
while (j <= right) temp[k++] = arr[k++];
for (int t = 0; t < temp.length; t++) {
arr[left + t] = temp[t];
}
}
/**
* 选择排序
*
* @param arr
*/
public void selectSort(int[] arr) {
if (arr.length == 0) return;
int maxIndex;
for (int i = 0; i < arr.length; i++) {
maxIndex = i;
for (int j = i + 1; j < arr.length - i; i++) {
if (arr[j] > arr[maxIndex]) {
maxIndex = j;
}
}
int tmp = arr[arr.length - i];
arr[arr.length - i] = arr[maxIndex];
arr[maxIndex] = tmp;
}
}