1.插入排序
1.1 概念
插入排序属于内部排序,是将一个数组分为一个有序表,和一个无序表,
然后从无序表中取数据,依次和有序表中的数据向前进行比较,
直到找到适当的位置,进行赋值(此处默认从小到大排序)
1.2 代码实现
import java.util.Arrays;
/**
* @author scXu:
* @version 创建时间:2021年5月15日 下午3:08:33
*
* 插入排序-内部排序
*/
public class InsertSort {
public static void main(String[] args) {
int[] arr = { 1, 5, 3, 10, 99, 45, 23, 78, 12 };
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
// 插入排序
public static void insertSort(int[] arr) {
/**
* 假定数组分为一个有序表,一个无序表,
* 第一轮,默认第一个元素组成一个有序表,后续元素组成一个无序表,
* 然后从arr[1]元素依次和有序表中元素比较,找到适当位置
* */
for (int i = 1; i < arr.length; i++) { //从下标1开始比较
int min = arr[i];
int minIndex = i - 1; // 初始最小下标设置为比较元素的前一个
while (minIndex >= 0 && min < arr[minIndex]) { //如果最小下标不越界,并且比较的元素比前一个元素小,则还需要进行向前比较
arr[minIndex + 1] = arr[minIndex]; //这是需要前一个元素往后移一个位置
minIndex--; //同时最小下标继续往前进一个位置
}
arr[minIndex + 1] = min; //跳出循环,说明找到位置,进行赋值即可
}
}
}