带哨兵java实现插入排序和希尔排序

参考:插入排序——基本插入排序与希尔排序(不带哨兵)
含义:插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

插入排序(升序)

①先将第2个元素看作是有序区间,第二个元素开始后的元素看作未排序列,第一个作为哨兵;

②从第3个元素开始直至最后,先让待排数据与前面的有序区间的最后一个数据进行比较, 直到其插入到有序区间的合适位置(即,插入后有序区间保持有序) ;

 /**
     * 直接插入
     */

    public  void MyInsertSort(int a[]){
   
        int i,j;
        for(i=1+1;i<a.length;i++){
   //a[0]作为哨兵,a[1]作为初始有序,i=1+1是为了后面希尔排序好理解
            if(a[i]<a[i-1]){
   
                a[0]=a[i];//设置哨兵
                for(j=i-1; a[j]>a[0];j--){
   
                    a[j+1]=a[j];//记录后移
                }
                a[j+1]=a[0];//插入
            }
        }


    }

在这里插入图片描述
时间复杂度:

我们以将序列排为升序为前提

先看最好的情况,序列已经是升序的,在这种情况下,需要进行的比较操作为n-1次;

最坏的情况,序列为降序序列,那此时需要进行的比较次数为n(n-1)/2次。

因此,平均来说,插入排序算法时间复杂度为O(n^2),因而,插入排序不适合数据量比较大的排序应用。
直接插入中哨兵作用

希尔排序(升序)

希尔排序(Shell Sort)又称为“缩小增量排序”。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值