Java排序--插入排序

插入排序是由排序的位置不断的向前比较,找到合适的位置,逐渐的对数据进行排序。

过程:
在插入排序中索引左边是有序的,但是位置并不确定,为了给更小的元素腾出空间,他们可能会进行移动,但是当前索引达到右端的时候就完成了排序。

时间:
插入排序所需的时间取决于输入的中元素的初始顺序。对于一个有序的数组或者接近有序的数组进行排序要比对一个乱序数组排序的时间短的多。
对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序需要N²/4次比较以及N²/4次交换。最坏情况下需要N²/2次比较和N²/2次交换。最坏需要N-1次比较和0次交换。

代码:
元素交换

private static void exch(Comparable[] a, int j, int i) {
    Comparable t=a[i];
    a[i]=a[j];
    a[j]=t;
}

比较元素两个值

private static boolean less(Comparable a, Comparable j) {

    return a.compareTo(j)<0;
}

上面两个方法可以看选择排序的介绍。

整个插入排序代码:

public static void sort(Comparable []a){
    //1
    int N=a.length;
    //2
    for (int i=1;i<N;i++){
        //3
        for (int j=i;i>0&&less(a[j],a[j-1]);j--){
            //4
            exch(a,j,j-1);
        }

    }

}

1.表示赋值,把数组的长度值赋值给N。
2.外层循环,循环次数。这里面i不是从0开始的而是从1开始的,因为在整个排序中第一个数值是不用排序的默认他是有序的。
3.内层循环,表示比较。j=i表示从第二个值开始向前比较,比较到了第一个值的时候就停止比较。less方法是比两个数的大小,如果后面的小于前面的就在下面进行交换。
4.表示交换的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值