package com.example.springmvcdemo;
/**
* @author shaohui.msh
*/
public class Sort {
public void choseSort(int[] array) {
int length = array.length;
for (int i = 0; i < length - 1; i++) {
int min = i;
for (int j = i + 1; j < length; j++) {
if (array[j] < array[min]) {
min = j;
}
}
int tmp = array[i];
array[i] = array[min];
array[min] = tmp;
}
}
/**
* 从第二个元素开始,逐个和前面的队列比较,比他大的就后移
*/
public void insertSort(int[] array) {
int len = array.length;
for (int i = 1; i < len; i++) {
int tem = array[i];
int left = i - 1;
while (left >= 0 && array[left] > tem) {
array[left + 1] = array[left];
left--;
}
array[left + 1] = tem;
}
}
private void quickSort(int[] array, int left, int right) {
int i = left;
int j = right;
int pivot = array[left];
while (i != j) {
while (array[i] < pivot && i < j) {
i++;
}
while (array[j] > pivot && j > i) {
j--;
}
if (i == j) {
break;
}
swap(i, j, array);
}
//基准数换一下
array[left] = array[i];
array[i] = pivot;
quickSort(array, left, i - 1);
quickSort(array, i + 1, right);
}
private void swap(int left, int right, int[] array) {
int temp = array[left];
array[left] = array[right];
array[right] = temp;
}
public static void main(String[] args) {
int[] t = {18, 7, 8, 6, 33, 2, 9, 1};
mergSort(t, 0, 7);
for (int i = 0; i < t.length; i++) {
System.out.print(t[i] + "\t");
}
}
/**
* 归并排序
* @param arr
* @param l
* @param r
*/
public static void mergSort(int[] arr, int l, int r) {
if (l >= r) {
return;
}
int mid = (l + r) / 2;
//递归二分 将数组分为 [左,中],(中,右]
mergSort(arr, l, mid);
mergSort(arr, mid + 1, r);
//归并排序
int aux[] = new int[r - l + 1]; //这里弄一个要处理的数组副本 长度是 R-L+1
for (int i = l; i <= r; i++) { //副本数组从 L 开始,所以与原数组存在一个 L 的偏移量
aux[i - l] = arr[i];
}
int i = l, j = mid + 1; //i记录左边元素的下标位置 j记录右边元素的下标位置
for (int k = l; k <= r; k++) { //k记录 arr 的下标位置
if (i > mid) {
arr[k] = aux[j - l];
j++;
} else if (j > r) {
arr[k] = aux[i - l];
i++;
} else if (aux[i - l] < aux[j - l]) {
arr[k] = aux[i - l];
i++;
} else {
arr[k] = aux[j - l];
j++;
}
}
}
}
排序算法总结
最新推荐文章于 2023-04-05 09:51:20 发布