2020/11/9 直接插入排序 java

老师很莫名其妙的叫我来讲这个排序,那只能重新回去看了下。

直接插入排序是由两层嵌套循环构成的,一个是当前的,一个是要跟前面比较的。

直接插入排序应该是从右到左的排序方式,也就是 0 1第一次判断,然后 0 1 2 第二次判断, 0 1 2 3 第三次判断...直到n,当然都是从右边数开始。

然后对于直接插入排序,最好的情况是整个数组是递增排序,那么无需移动元素,只需要对比n-1次

而最坏的情况则是递减数组,移动和对比元素都是n(n-1)/次

然后直接插入排序的时间0复杂度是O(n^2)  空间复杂度是O(1)

public static void main(String[] args) {
    int arr[]={2,1,5,3,6,4,9,8,7};
    int k=0;
    for(int i=1;i<arr.length;i++)
    {
        k=arr[i];    //存储当前这个值
        for(int j=i;j>=0;j--)
        {
            if(j>0&&arr[j-1]>k)      //先判断j是否大于0,因为j要是不大于0,j-1会越界,因为j=i,所以j-1就是i的前一个值,然后判断大小,如果是大于i,那么把值赋予给i
            {
                arr[j]=arr[j-1];
            }else{                      //这个代码用来把i的值赋给j-1,因为如果上面的代码执行过的话,那么此时的j已经减去过了,虽然不知道到底减到了几,但是一定是在比前一个数大,比后                                                     一 个数小的位置
                arr[j]=k;
                break;
            }
        }
    }
    System.out.println(Arrays.toString(arr));
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值