基本工具
/**
* 判断数组arr是否递增有序。
* @param arr 需要验证的数组
* @return 递增有序返回true,否则返回false。
*/
public static boolean isSorted(int[] arr) {
// 边界处理
if(arr.length < 2) {
return true;
}
// 递增判断
for(int i = 0; i < arr.length -1; i++) {
if(arr[i] > arr[i + 1]) {
return false;
}
}
return true;
}
/**
* 获取随机长度,随机值的整型数组。
* @param length 数组长度
* @param maxValue 数组值最大值。
* @return
*/
public static int[] getArr(int maxLen, int maxValue) {
// 随机长度
int len = (int)(Math.random() * maxLen);
int[] arr = new int[len];
// 随机值
for(int i = 0; i < len; i++) {
arr[i] = (int)(Math.random() * maxValue);
}
return arr;
}
/**
* 交换数组i和j两个位置上的数字。
*/
public static void swap(int[] arr, int i, int j) {
int k = arr[i];
arr[i] = arr[j];
arr[j] = k;
}
// 打印数组
public static void printArr(int[] arr) {
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
选择排序
/**
* 选择排序。
* 遍历数组,找到最小值;放到最小位置。
*/
public static void selectSort(int[] arr) {
// 边界处理
if(arr.length < 2) {
return ;
}
// 从0开始遍历
for(int i = 0; i < arr.length; i++) {
// 记录每次遍历的最小值序号
int minIndex = i;
// 从遍历到的当前序号开始,找到后面的最小值
for(int j = i + 1; j < arr.length; j++) {
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 将最小值放到当前位置
swap(arr, i, minIndex);
}
}
冒泡排序
/**
* 冒泡排序。
* 两两对比,较大的靠后。
*/
public static void bubbleSort(int[] arr) {
// 边界处理
if(arr.length < 2) {
return ;
}
// 冒泡排序
for(int i = 0; i < arr.length; i++) {
// 每轮冒泡,确定最大值
for(int j = 1; j < arr.length - i; j++) {
// 两两对比,较大的靠后
if(arr[j - 1] > arr[j]) {
swap(arr, j - 1, j);
}
}
}
}
插入排序
/**
* 插入排序。
* 前方已经有序,将当前数据放到前方有序数组中。
*/
public static void insertSort(int[] arr) {
// 边界处理
if(arr.length < 2) {
return ;
}
// 插入排序
for(int i = 1; i < arr.length; i++) {
int numIndex = i;
// 将当前值,插入到左边有序数组中
// 有序数组的范围: (i - 1) ~ 0
for(int j = i - 1; (j >= 0) && (arr[numIndex] < arr[j]); j--) {
swap(arr, numIndex, j);
numIndex--;
}
}
}
排序测试
public static void main(String[] args) {
int[] arr = getArr(10, 20);
printArr(arr);
// selectSort(arr);
// bubbleSort(arr);
insertSort(arr);
printArr(arr);
boolean isSorted = isSorted(arr);
System.err.println(isSorted);
}