/**
* 常见排序
*
* @author guodong_sun
*/
public class SortMethod {
/**
* 冒泡排序 比较相邻的两个值,交换位置
*
* @param arr
*/
public static void bubbleSort(int[] arr) {
int size = arr.length;
boolean f = true;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
f = false;
}
}
if (f) {
break;
}
}
printArr(arr);
}
/**
* 选择排序 选择出最小值,然后交换位置
*/
public static void selectSort(int[] arr) {
int length = arr.length;
for (int i = 0; i < length - 1; i++) {
// 最小值下表
int minIdx = i;
// 最小值
int minVal = arr[i];
for (int j = i; j < length - i - 1; j++) {
if (arr[j] < minVal) {
minIdx = j;
minVal = arr[j];
}
}
arr[minIdx] = arr[i];
arr[i] = minVal;
}
printArr(arr);
}
/**
* 插入排序 把无序数列插入到有序数列中
*
* @param arr
*/
public static void insertSort(int[] arr) {
int length = arr.length;
for (int i = 1; i < length - 1; i++) {
int j = i;
int value = arr[i];
while (j > 0 && arr[j] < arr[j - 1]) {
arr[j] = arr[j - 1];
arr[j - 1] = value;
j--;
}
}
printArr(arr);
}
/**
* 希尔排序 先分组,再插入排序 分组规则 length/3+1
*
* @param arr
*/
public static void shellSort(int[] arr) {
int length = arr.length;
int step = length;
do {
step = step / 3 + 1;
for (int i = step; i < length - 1; i += step) {
int value = arr[i];
while (i - step >= 0 && arr[i - step] > value) {
arr[i] = arr[i - step];
arr[i - step] = value;
i -= step;
}
}
} while (step > 1);
printArr(arr);
}
/**
* 打印数组
*
* @param arr
*/
private static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
int[] arr = {0, -1, 7, -4, 8, 12, 10};
bubbleSort(arr);
selectSort(arr);
insertSort(arr);
shellSort(arr);
shellSort(arr);
}
}
Java实现常见算法
最新推荐文章于 2024-04-09 04:41:18 发布