插入排序详解

1.插入排序

1.什么是插入排序

插入排序就是把待排序的元素插入到已经的序列中,直到所有的元素插入完全,就得到了一个有序序列。这个过程就类似整理扑克牌

2. 插入排序的思路

这里使用A1,A2,A3……代表第一个数,第二个数,第三个数

1.可以把A1直接看成有序列表,从A2开始排序

2.把A2和A1比较,使用tmp记录A2的值

如果A1比较大:让A1向前挪动一位放在A2的位置,然后让tmp和A0比较,因为A0不存在,所以直接将第一个位置赋值为tmp

如果A1比较小:直接让第二个位置赋值为tmp

3.将A3,A4……依次插入,重复类似2步骤的操作

例如:下面要排序:4 ,3,7,1  

3.插入排序的实现 
  • 这个代码的关键是把[0,end]看作有序,将end+1插入到前面的序列中
  • 首先让end=0,[0,0]是有序的,将end+1位置的数插入到前面(int tmp = a[end+1])
  • 如果tmp<a[end],a[end+1] = a[end],end--(end>=0循环继续)
  • 如果tmp>=a[end],退出循环
  • 将a[end+1] = tmp。如果因为end<0退出循环,那么end+1=0,相当于a[0] = tmp;如果因为tmp>=a[end]退出循环,那么a[end+1] = tmp就是合理的

        int end = 0;

        int tmp = a[end + 1];
        while (end >= 0) {
            if (tmp < a[end]) {
                a[end + 1] = a[end];
                end--;
            }
            else
                break;
        }
        a[end + 1] = tmp;

    }

  • 让end++重复实现上面步骤
// 直接插入排序
void InsertSort(int* a, int n)
{
	for (int end = 0; end < n - 1; end++) {

		int tmp = a[end + 1];
		while (end >= 0) {
			if (tmp < a[end]) {
				a[end + 1] = a[end];
				end--;
			}
			else
				break;
		}
		a[end + 1] = tmp;

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值