插入排序思想:
上面为准备排序 数组,下面为它们的坐标;
首先,我们从坐标1开始排序(因为坐标0之前没有数,所以相当于是已经排好了的数组),坐标0 1 比较发现,3小于8调换位置,变成下面:
接下来比较坐标1 2,发现坐标1<坐标2,继续往下
比较坐标2 3,发现坐标2>坐标1,调换位置,然后接着继续往前比较,直到没有坐标比它大为止
比较坐标3 4,发现坐标3>坐标4,调换位置,然后接着继续往前比较,直到没有坐标比它大为止
后面的5同理,不在分析。
总结来说,就是想打扑克牌一下,每拿到一张牌就插入到手中已经按照顺序排好的牌里面。
时间复杂度:
最好情况下需要排序的数组已经是有序的(1,2,3,4,5,6),那么它的时间复杂度为O(N);
最差情况下全是无序的数组(6,5,4,3,2,1),那么它的时间复杂度为O(N^2);
插入排序代码
public class InsertionSort {
public static void insertionSort(int[] arr){
if (arr==null || arr.length<2){
return;
}
for (int i = 1; i < arr.length; i++) {
for (int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
swap(arr,j,j+1);
}
}
}
private static void swap(int[] arr, int j, int i) {
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}