插入排序
何为插入,就是在一个地方插入一个数字
思路:
- 观上图就知道从头遍历的数首先比前面小的会进行比较,直到比前面的数大,就开始插入
- 在为插入做准备而进行的比较时我们要进行换位置,通俗来讲就是比当前数大的都往后移一格
- 会发现当前数的前面可以看作是一个递增数组
这下我们知道插入是什么了吧,坦白来讲:
就是比前面小的数字到前面去嘛,而插入的原理则是,大的数往后移动,然后给当前数腾一个位置出来
Sort.java
package 插入排序;
public class Sort {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int arr[] = {2,1,5,3,6,4,9,8,7};
sort(arr);
for (int i : arr) {
System.out.print(i+" ");
}
}
public static void sort(int[] arr) {
int temp=0;
//待排元素小于有序序列的最后一个元素时,向前插入
for(int i=1;i<arr.length;i++) {
if(arr[i]<arr[i-1]) {
temp=arr[i]; //保存当前值
//逆序遍历从i开始的前面的有序序列
for(int j=i;j>=0;j--) {
if(j>0&&arr[j-1]>temp) {
arr[j]=arr[j-1]; //全部大于arr[i]的值就往后移
}else {
arr[j]=temp; //不大于的时候当前数组就为要插入的地方了
break;
}
}
}
}
}
}
总结
- 每次的插入都要比较,但是每次比较,因为前面是递增的,比到一个更小的,那么前面就不用比了
- 如果比前一个数大,那么都不用比较了,因为前面是递增的,比前面所有数都大,节省了时间复杂度