基本思想:从待排数列第一个数据开始当做有序数列,后面的当做无序数列,将无序数列中的元素在有序数列从后向前扫描找到他的位置插入,将该位置后面的数据向后移动。
时间复杂度:O(n²), 最高好情况O(n) ,最坏的情况O(n²)
步骤:
代码:
public class InsertSort {
public static void main(String[] args) {
int[] arr={12,34,6,4,89,75,134,44,86,90};
insertSort(arr);
for(int e:arr){
System.out.println(e);
}
}
/**
* @Description: 不要用临时数组哟,开销太大
* @Param: [arr]
* @return: [int[]]
* @Author: Kwg
* @Date: 2022/1/8
*/
public static void insertSort(int[] arr){
//定义指针,从后向前面遍历,寻找正确的插入位置
int j=0;
for(int i=1;i<arr.length;i++){
//定义临时变量
int temp=arr[i];
//从后向前遍历,寻找正确的位置
for(j=i-1;j>=0;j--){
//插入数比有序数列中的数小的话就将有序树列中的数向后移动
if(arr[j]>temp){
arr[j+1]=arr[j];
}else{
break;
}
}
//for循环最后经过了一次j--,所以插入的话要先进行j+1
arr[j+1]=temp;
}
}
}