小白排序之插入排序

插入排序,何谓插入排序呢?即我假定现在的数据已经排好,我只需要将新数据排进合适的位置即可。详细见下文。

首先,我拿到一个包含n个元素的数组,索引分别为0,1,2,...n-1。我首先假定数组的第一个元素以及排好顺序,这是显然的。然后我将数组的第二个元素与第一个元素进行排序,这很简单吧。于是我们得到了一个排好序的二元子数组。再然后,我们拿出第三个元素,插入到排好序的二元数组中,怎么插入呢?无非就是比较,然后记下索引,插入即可,由于数组具有索引(即下标),插入与交换有些不同,交换只涉及到两个元素,这里的插入是将后面的元素放到合适位置上,该位置的原有元素直到要插入的元素整体向后推一位。这样迭代下去,直到将最后一个元素插入到数组中。

public static void insertSort(int[] array){
		for(int i = 1; i< array.length; i++){
			int currentValue = array[i];
			int position = i;
			for (int j = i - 1; j >= 0; j--) { 
				if (currentValue<array[j]){
					array[j+1] = array[j];
					position = j;
				}
				else
					break;
			}
			array[position] = currentValue;
		}
		
	}
首先,还是两层循环,外循环负责整个数组的遍历,内循环负责已经排序好的子数组的遍历。

为什么内循环要从后往前遍历呢?原因是我们正序排列数组,插入时被插入位置之后的元素都要向后推一位,而之前的数组我们保持不动,故从后往前遍历更为有效。

为什么要定义position呢?跟选择排序一样是为了记住要插入的位置。

为什么要定义currentValue呢?因为有可能在内循环第一次循环时,我们要插入的数据就被覆盖掉了,相当于用一个临时变量记下要插入的数据。

主函数测试代码同选择排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值