插入排序的基本思想
插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它依次与有序表的元素进行比较,将它插入到有序表中适当的位置,是指成为新的有序表,即不断扩张有序表。
插入排序的过程图
![](https://i-blog.csdnimg.cn/blog_migrate/ad60eb1219b4a406dcdad8dfa12b7b1e.png#pic_center)
代码演示
public class InsertSort {
public static void main(String[] args) {
int[] arr = {3,1,6,2,5};
insertSort(arr);
}
//插入排序算法(升序)
public static void insertSort(int[] arr){
int insertIndex = 0;//插入的位置
int insertVal = 0;//需要插入的数据
for (int i=1;i<arr.length;i++){
insertIndex = i-1;//初始化插入的位置
insertVal = arr[i];//初始化需要插入的数据
//将有序表中比待插入元素大的元素依次向后移位,再将其插入
//若需要降序排序,则改为insertVal>arr[insertIndex]
while(insertIndex>=0 && insertVal<arr[insertIndex]){
arr[insertIndex+1] = arr[insertIndex];
insertIndex--;
}
//判断是否需要插入数据
if(insertIndex+1 != i){
arr[insertIndex+1] = insertVal;
}
}
//打印排序过后的数组
for (int i=0;i< arr.length;i++){
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
}