【数据结构】插入排序 ( 内附详细代码、排序动图 )

序言

插入排序是一种逻辑简单、基础的排序,从插入排序又延展出了一些排序,如:希尔排序(Shell Sort)。


思路讲解

  1. 插入排序顾名思义,通过插入数字的方式来排序。
  2. 怎么个插入法?
    1. 单次循环遍历

      1. 从第一个数开始,默认第一个数已经排好序,因为单个数字不需要排序。
      2. 遍历到第二个数,让其与前面已经排好序的元素依次做对比。例如:第二个数是1,而第一个数是4,那么1需要排在4的前面,所以需要把4往后挪一个位置(填补了刚刚1的位置),把1插入到4的前面。以此往复。
        请添加图片描述
    2. 多次向后循环遍历
      请添加图片描述

代码示例

void InsertSort(int* a, int n)
{
	int i = 1;
	while (i < n)
	{
		int tmp = a[i];
		int j = 1;
		while (i - j > -1 && tmp < a[i - j])
		{
			a[i - j + 1] = a[i - j];
			// 最后的++j:即使下一次不进入循环,j也+1了,意味着循环内外j的值不一样
			++j;      
		}
		a[i - j + 1] = tmp;
		++i;
	}  
}               
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值