插入排序算法

插入排序

1.插入排序规则

  • 划分两个子序列,有序的和无序的;
  • 从无序序列中取出一个元素,插入到有序序列(保证顺序)。扩大有序子序列,减小无序子序列;
  • 重复以上步骤.
public static void insert(int[] a){
    //i 代表待插入元素的索引,1个元素默认有序
    for(int i = 1;i< a.length;i++){
        int t = a[i];//代表插入的元素值
        int j=i-1;//代表已排序子序列的元素索引
        while(j>=0){
            if(t<a[j]){
                a[j+1] = a[j];
            }else{
                break;//退出循环,减少比较次数
            }
            j--;
        }
        a[j+1]=t;
    }
}

2.优化方式

  • 待插入元素进行比较时,遇到比自己小的元素,就代表找到了插入位置,无需进行后续比较;
  • 插入时可以直接移动元素,而不是交换元素(有零时变量,一次交换,就移动了三次元素)。

3.比较(选择排序)

  • 是稳定排序算法;
  • 平均时间复杂度O( n 2 n^2 n2)
  • 大部分情况下,性能略高于选择排序;
  • 对有序数组最好能达到O(n),冒泡排序O(n)。

缺点: 若最值元素位于数组前列,需要经历多轮移动才能到正确位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值