JAVA-直接插入排序

直接插入排序:

直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有
元素为止。
在这里插入图片描述

代码
public static void main(String[] args) {
        int[] array= {4,2,8,9,5,7,6,1,3};
        System.out.println("未排序数组排列:");
        display(array);
        System.out.println("------------------------------");
        sort(array);
        System.out.println("------------------------------");
        System.out.println("排序后数组排列:");
        display(array);
    }

   public static int[] sort(int[] array){
        int j;
        //从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
       for (int i = 0; i <array.length ; i++) {
           //记录要插入的数据
           int temp = array[i];
           j = i;
           while (j > 0 && temp < array[j-1]){
               //从已经排序的序列最右边的开始比较,找到比其小的数
               //向后挪动
               array[j] = array[j-1];
               j--;
           }
           //存在比其小的数,插入
           array[j] = temp;
           System.out.print("第"+(i+1)+"轮排序后的结果为:");
           display(array);
       }
       return array;
   }
    //遍历显示数组
    public static void display(int[] array){
        for (int i = 0; i <array.length ; i++) {
            System.out.print(array[i]+"");
        }
        System.out.println();
    }

输出结果:

在这里插入图片描述

插入排序性能分析:

在第一轮排序中,它最多比较一次,第二轮最多比较两次,一次类推,第N轮,最多比较N-1次。因此有
1+2+3+…+N-1 = N*(N-1)/2。
假设在每一轮排序发现插入点时,平均只有全体数据项的一半真的进行了比较,我们除以2得到:N*(N-
1)/4。用大O表示法大致需要需要 O(N2) 时间级别。
复制的次数大致等于比较的次数,但是一次复制与一次交换的时间耗时不同,所以相对于随机数据,插入排序
比冒泡快一倍,比选择排序略快。
这里需要注意的是,如果要进行逆序排列,那么每次比较和移动都会进行,这时候并不会比冒泡排序快。

PS:

冒泡、选择、插入用大 O 表示法都需要 O(N2) 时间级别。一般不会选择冒泡排序,虽然
冒泡排序书写是最简单的,但是平均性能是没有选择排序和插入排序好的。
选择排序把交换次数降低到最低,但是比较次数还是挺大的。当数据量小,并且交换数据相对于比较数据更加
耗时的情况下,可以应用选择排序。
在大多数情况下,假设数据量比较小或基本有序时,插入排序是三种算法中最好的选择

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值