排序算法三:插入排序

简单排序中最好用且稳定,比选择,冒泡的效率高
对于样本小且基本有序的时候效率比较高

思想: 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

在这里插入图片描述
平均时间复杂度:O(n²),空间复杂度:1,稳定

基础版:


public class Insertion {
    public void insertion(){
        int[] arry2={32,3124,435,6,889,79,3,56,33,56,87};
        for(int i=1;i<arry2.length;i++){      //从数组第二个数开始遍历
          for (int j=i;j>0;j--){              //把这个数与前面的数相比较
              if (arry2[j]<arry2[j-1]){       //若这个数小于前面的数
                  int temp=arry2[j];          //交换这两个数
                  arry2[j]=arry2[j-1];
                  arry2[j-1]=temp;
              }
          }
        }
          for (int i=0;i<arry2.length;i++) {
            System.out.print(arry2[i]+" ");
        }
    }
}

优化版:


public class Insertion {
    public void insertion(){
        int[] arry2={32,3124,435,6,889,79,3,56,33,56,87};
        for(int i=1;i<arry2.length;i++){      //从数组第二个数开始遍历
            int temp=arry2[i];         //保存当前数
            int j;
            for(j=i;j>0;j--){
                if(temp<arry2[j-1]){        //判断这个数是否比前面的数小
                  arry2[j]=arry2[j-1];      //直接把前面的数往后移
                }else {
                    break;
                }
            }
            arry2[j]=temp;                  //再把这个数插入到合适位置
        }
          for (int i=0;i<arry2.length;i++) {
            System.out.print(arry2[i]+" ");
        }
    }
}

输出:

3 6 32 33 56 56 79 87 435 889 3124

发布了18 篇原创文章 · 获赞 43 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42194695/article/details/104564908