算法--插入排序

代码

void insertion sort(Type* a,int n)
{
	Type key;
	for (int i = ; i < n; i++)
	{
		key = a[i];
		int j = i - 1;
		while(i >= 0 && a[i] > key)
		{
			a[j+1] = a[j];
			j--;
		}
		a[j+1]=key;
	}
}

解释

假设有一个数组a = {5,2,4,6,1,3},
第一次循环(i = 1)

  • key = a[1] = 2; j = i - 1 = 0.
  • 进入while 循环:判断 j >= 0 && a[j] > key (既 0 >= 0 && 5 > 2),条件成立。
  • 执行a[j + 1] = a[j]; ,也就是a[1] = a[0],此时数组变为{5,5,4,6,1,3}
  • 执行j–;,j变为-1,while循环结束。
  • 执行a[j + 1] = key;,此时 j = -1,所以 j + 1 = 0,既 a[0] = 2.现在数组变为{2,5,4,6,1,3},"已排序部分[2,5]"是有序的
    第二次循环(i = 2)
  • key = a[2] = 4; j = i - 1 = 1.
  • 进入while 循环:判断 j >= 0 && a[j] > key (既 0 >= 0 && 5 > 2),条件成立。
  • 执行a[j + 1] = a[j]; ,也就是a[2] = a[1],此时数组变为{2,5,5,6,1,3}
  • 执行j–;,j变为 0,再次判断while条件; 0 >= 0 && a[0] > 4不成立,循环结束。
  • 执行a[j + 1] = key;,此时 j = 0,所以 j + 1 = 1,既 a[1] = 4.现在数组变为{2,4,5,6,1,3},"已排序部分[2,4,5]"是有序的。
    。。。。。。。。。。。。。。。。
    如果while循环里要执行多次就每次将大的数复制到后面,就会覆盖之前复制的数字。例如
    a = {1,2,4,5,6,3}要将3排序
    1.{1,2,4,5,6,6}->{1,2,4,5,5,6}->{1,2,4,4,5,6}->{1,2,3,4,5,6,}
    要排序的值一直在临时变量中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wind_one2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值