1、选择排序;
从 1 - (n -1 )找到比 0 这个位置小的值;
arr = [3, 1, 2, 4, 8, 5, 5, 6, 3];
/**
* i
* 0 (i + 1 ) - (n - 1) 找到比arr[0]小的数
* 1 (i + 1 ) - (n - 1) 找到比arr[1]小的数
* 2 (i + 1 ) - (n - 1) 找到比arr[2]小的数
*
*/
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j-1] > arr[j]) {
swap(arr, j - 1, j);
}
}
}
public static void swap(int[] arr, i, j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
2、冒泡排序
int [] arr = {9, 1, 3, 2, 8, 4, 5};
/**
* 每次循环对第一个元素和第二个元素进行比较, 若第一个大第二个则交换; 直到将最大的放到最后一个
*
* 0 - n-1 找打最大的;依次交换位置;
*
*
*/
for (int i = arr.length - 1; i > 0; i -- ) {
for (int j = 0; j < i; j ++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
3、插入排序
int [] arr = {9, 1, 3, 2, 8, 4, 5 , 0};
/**
* 插入排序
*
* 0 - 0 排序
* 0 - 1 排序
* 0 - 2 排序
* 0 - 3 排序
* 0 - n ~
*
*/
for (int i = 0; i < arr.length; i ++) {
int newArrIndex = i;
while(newArrIndex > 0 && arr[newArrIndex - 1] > arr[newArrIndex]) { // 依次向前排序;直到找到第一个
swap(arr, newArrIndex - 1, newArrIndex);
newArrIndex -- ;
}
}
实现方式二:
/**
* 插入排序
*
* 0 - 0 排序
* 0 - 1 排序
* 0 - 2 排序
* 0 - 3 排序
* 0 - n ~
*
*/
for (int i = 0; i < arr.length; i ++) {
for (int newArrIndex = i; newArrIndex > 0 && arr[newArrIndex - 1] > arr[newArrIndex]; newArrIndex -- ) {
swap(arr, newArrIndex- 1, newArrIndex);
}
}
验证方法:
public static int[] randomArr(int arrMaxLength, int arrMaxValue) {
int arrLength = (int) (Math.random() * arrMaxLength);
int rtnArr[] = new int [arrLength];
for (int i = 0; i < arrLength; i++) {
rtnArr[i] = (int) (Math.random() * arrMaxValue);
}
return rtnArr;
}
public static boolean checkSortArr(int [] arr) {
if (arr.length <= 0) return true;
int count = arr[0];
for (int i = 1; i < arr.length; i++) {
if (count > arr[i]) {
return false;
}
count = Math.max(count, i);
}
return true;
}
public static void main(String args[]) {
for (int i = 0; i < 1000; i++) {
int[] ints = randomArr(20, 8000);
insertSort2(ints);
if (!checkSortArr(ints)) {
System.out.println("排序异常");
System.out.println(Arrays.toString(ints));
}
}
}