1.插入排序

插入排序(Insertion-sort)

一种增量式的做法

1. 特点

在处理少量数据元素进行排序的有效算法。

  • 原地排序(sorted in space):在数组内进行重新排序。

2. 算法基本认识

  1. 代码由内外两层for循环构成,内循环做比较,外循环控制哪个是插入值。
  2. 排序参数是一个数组 A [1…n]。(包含n个待排序数)
  3. A [ j ] 先放入key变量中。
  4. 将数组逻辑划分为“手牌区”A [1…j-1],“”key区域=A[ j ] ” 和“待插入区”A [j+1…n](开始时手牌区为1)
  5. key依次从右至左依次与手牌区比较,被比较手牌区值大则向右移动,key再与左边下一个手牌值比较,直到被比较手牌小于key,key插入此值右边位置。

3. 排序过程

eg:A [5,2,4,6,1,3]

  1. 第一次插入,5在手牌区,2(key) 与手牌区5作比较,5向后移动。
    在这里插入图片描述
  2. 第二次插入,(2,5)在手牌区,4(key)在内循环中先于5比较,5大向右移动一格,再与2比较,2小,key插入5移去的空缺位置。
    在这里插入图片描述
  3. 第三次插入
    在这里插入图片描述
  4. 第四次插入,key越小,移动个数多。
    在这里插入图片描述
    在这里插入图片描述
  5. 最终状态
    在这里插入图片描述

4. java代码

int[] A= {5,2,4,6,1,3};
		for(int j=1;j<A.length;j++) {
			int key=A[j];
			int i=j-1;
			while(i>=0&&A[i]>key) {
				A[i+1]=A[i];
				i--;
			}
			A[i+1]=key;
		}
		//打印
		for(int n:A)
		System.out.print(n);
	}

5. 算法分析

  • 运行时间——>基本操作数(步数)
    T(n)=an^2+bn+c(最坏情况)
    一般情况下,我们只用分析最坏情况下的增长量级,因为当n很大时,低阶项就不那么重要了,得出 O(n^2)
  • 输入规模——>元素个数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值