收获插入排序三步曲

插入排序

何为插入,就是在一个地方插入一个数字

在这里插入图片描述

思路:

  1. 观上图就知道从头遍历的数首先比前面小的会进行比较,直到比前面的数大,就开始插入
  2. 在为插入做准备而进行的比较时我们要进行换位置,通俗来讲就是比当前数大的都往后移一格
  3. 会发现当前数的前面可以看作是一个递增数组

这下我们知道插入是什么了吧,坦白来讲:

就是比前面小的数字到前面去嘛,而插入的原理则是,大的数往后移动,然后给当前数腾一个位置出来

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;
     }
    }
   }
  }
 }
}

总结

  1. 每次的插入都要比较,但是每次比较,因为前面是递增的,比到一个更小的,那么前面就不用比了
  2. 如果比前一个数大,那么都不用比较了,因为前面是递增的,比前面所有数都大,节省了时间复杂度
    在这里插入图片描述
发布了105 篇原创文章 · 获赞 19 · 访问量 4967

猜你喜欢

转载自blog.csdn.net/jiohfgj/article/details/105038137