插入排序(Insertion sort)

排序原理

假定第1个数字是最小的(升序),从第2个数字开始,一次将数字插入到它应该放置的位置。
(可以理解为玩扑克牌时整理手上的牌)

示例代码

	int[]arr = new int[]{8,1,9,4,0,3,5,2,7,6};
	
	int count = 0;
	long start = System.currentTimeMillis(); // 记录开始时间
	for (int i = 1; i < arr.length; i++) {
	    // 当前需要确定位置的元素的下标
	    int j = i;
	    // 当j>0时循环
	    while (j>0) {
	        // 判断j指向的元素与其左侧元素的大小
	        if (arr[j] < arr[j-1]) {
	            // 当左侧元素 j-1 更大时,执行换位
	            int temp = arr[j];
	            arr[j] = arr[j-1];
	            arr[j-1] = temp;
	            // j自减,表示向左移动
	            j--;
	            count++;
	        } else {
	            // 当不满足条件时(左侧元素小于或等于当前元素),跳出当前循环
	            break;
	        }
	    }
	}
	long end = System.currentTimeMillis(); // 记录结束时间
	// 输出显示数组
	System.out.println(Arrays.toString(arr));
	System.out.println("排序完成,耗时:"+(end-start)+"ms, 换位次数: "+count+"次"); // 计算耗时

排序流程

  1. 先假设第一个元素为最小元素,则第一轮循环是从第二个元素开始比较的。
    {1,8,9,4,0,3,5,2,7,6}
  2. 第二轮循环,将第三个元素依次与第二,第一个元素进行比较,若第三个元素小于第二个元素,则进行换位,第一个元素同理
    {1,8,9,4,0,3,5,2,7,6}
  3. 第三轮循环及后续循环与第二轮循环类似,但是注意,假设第四个元素小于第三个元素,进行换位,但大于第二个元素则不进行换位,也不继续向左比较其他元素。因为左边的元素都是比较过的,所以默认左侧元素都是排序好的
    {1,4,8,9,0,3,5,2,7,6}
  4. 以此类推,循环结束,最终排序结果为:
    {0,1,2,3,4,5,6,7,8,9}

总结

随着排序的进行,需要对比和换位的操作均可能明显的减少,所以,插入排序的效率明显高于冒泡排序和选择排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值