插入排序

插入排序

排序原理:

是通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应的位置并插入.插入排序在实现上,再从后往前扫描过程中,需要反复把已排元素逐步向后挪位,为最新元素提供插入空间.

过程分析:
  1. 首先我们选定一个索引,假设其左边元素是有序的,用索引上元素和它左边的元素从右往左比较.
    在这里插入图片描述

  2. 如果左边的元素大于取出的元素,那么将这个元素右移一位,此时2已经比到最左边停止比较,将2 空位上,再将空位索引右移.
    在这里插入图片描述

  3. 经过上步得到下面的结果,这时空位左边两个元素已经有序了,再将空位元素取出,向左比较.遇到大的将其右移一位,遇到小的停止比较,将6放在空位上.
    在这里插入图片描述

  4. 经过上一步得到结果如下.
    ]

  5. 这时空位上取出元素为5,依次和左边元素比较.直至遇到小于5的数,或者到了最左边.
    ]
    ]
    ]
    在这里插入图片描述

  6. 经过上面处理,已经有5个元素有序.
    ]
    ]
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

代码实现:
public class Test3 {
    public static void main(String[] args) {

        int [] arr = {9,2,6,7,5,8,4,1};

        //外层向右的index,即作为比较对象的数据的index
        for(int i = 1; i<arr.length; i++){
            //用作比较的数据
            int temp = arr[i];
            int j = i-1;
            //当比到最左边或者遇到比temp小的数据时,结束循环
            while(j>=0 && arr[j]>temp){
                arr[j+1] = arr[j];
                j--;
            }
            //把temp放到空位上
            arr[j+1] = temp;
            //打印每次内层循环完结果
           System.out.println(Arrays.toString(arr)); 
        }
        System.out.println(Arrays.toString(arr));
    }
}

结果:

[2, 9, 6, 7, 5, 8, 4, 1]
[2, 6, 9, 7, 5, 8, 4, 1]
[2, 6, 7, 9, 5, 8, 4, 1]
[2, 5, 6, 7, 9, 8, 4, 1]
[2, 5, 6, 7, 8, 9, 4, 1]
[2, 4, 5, 6, 7, 8, 9, 1]
[1, 2, 4, 5, 6, 7, 8, 9]
[1, 2, 4, 5, 6, 7, 8, 9]

小结:

选取一个索引A,假设其左边元素是有序的,将其拿出来,这时数组就会出现一个空位,
我们将取出来的元素与他左边元素从右往左比较,遇到比它大的,那么将这个元素右移一位,
如此下去,直到取出的元素遇到比它小或者比到了最左端,即停止,再将取出元素放回当前空位(即符合它的插入位置),
同时A索引右移一位.这样一轮下来,索引左边的元素就是有序的按照这种思想下去就可以完成排序.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值