排序思想:将一个数组分成有序和无序两部分,再从无序部分中的元素逐个插入的有序部分中去。
int []arr={3,48,25,57,89,1,23,56};
比如这个数组,从第一个元素开始找到最大有序子序列,即为{3,48},然后就把25开始的元素向已有序序列中插入,{3,25,48}{无序部分}。所有元素都插入进去后,排序完成。
时间复杂度:最坏情况:O(n^2),即所有元素都是乱的,最好情况:O(n),即已经有序。
空间复杂度:O(l),不需要额外辅助空间
属于稳定排序
源码如下:
import java.util.Arrays;
public class InsertOrder {
public static void main(String[] args) {
int []arr={3,48,25,57,89,1,23,56};
int index=-1;
for (int i = 0; i < arr.length; i++) {
if(arr[i]>arr[i+1]){
System.out.println("无序的初始索引为:"+i);
break;
}
}
for (int i = index; i < arr.length; i++) {
int j=i;
while (j>0&&arr[j]<arr[j-1]){
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
j--;
}
}
System.out.println(Arrays.toString(arr));
}
}