插入排序是java中排序的一种,特点就是效率低,容易实现
一、插入排序原理
有一组数据,我们可以将这些数据分为有序组和带插入组。每次从待插入组中取出第一个元素,与有序组的元素从 后往前进行比较 并找到合适的位置,将该元素插到有序组当中。直到待插入组元素个数为0。每次插入的元素,都会进行判断找到合 适的位置,其实插入排序就相当于选择排序的一种逆序实现。
二、直接插入排序时间复杂度
直接插入排序在最好情况下,需要比较n-1次,无需交换元素,时间复杂度为O(n);
在最坏情况下,时间复杂度为O(n2)。
但是在数组元素随机排列的情况下,插入排序还是要优于上选择排序和冒泡排序的。
三、插入排序图解
四、步骤实现:
1、首先比较数组的前两个数据,并排序;
2、比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置;
3、比较第四个元素与前三个排好序的数据,并将第四个元素放入适当的位置;
....
4、每次排序后,我们都可以确定一个值的位置,直至把最后一个元素放入适当的位置。
五、代码结果及实现
六、完整代码
package cn.dzp.flyroc.day01;
import java.util.Arrays;
public class InsertSortDemo {
public static void main(String[] args){
int[] arr ={8,3,2,5,4,7};
System.out.println("这是排序前的结果:"+Arrays.toString(arr));
System.out.println("--------------------------------------------------");
insertSort(arr);
}
//直接插入排序
public static void insertSort(int[] arr){
int temp; //(优化代码,不用每次执行循环的时候,都要给temp分配内存空间)
for (int i = 1; i < arr.length; i++){ //遍历数组
temp = arr[i]; //记录待插入的元素
int j; //记录待插入元素之前的所有元素
for (j = i -1; j >= 0; j--){
if (arr[j] > temp){
arr[j+1] = arr[j];
}else {
break;
}
}
arr[j+1] = temp;
System.out.println("这是第"+i+"次"+"插入排序后的结果:"+ Arrays.toString(arr));
}
}
}