【C语言】直接插入排序

什么是排序?

排序,在我们生活中很常见,如:点外卖时,看到一份蛋炒饭的店排名;我们在班级中的成绩排名高低;全国各省GDP的排名......这些都是排序。

直接插入排序

 根据其定义可知,用自己的话来理解就是,将一个数据,插入到原来就是有序的数组中去的操作就叫做直接插入排序。

直接插入排序思路分析

假设,就有以上这么一个数组,然后有一个tmp需要直接插入到这个数组中去。该咋实现呢?

因为直接插入排序是插入到原来本就有序的数组中去,那么我们就得需要将其tmp值与数组中的每一个值都进行比较。当遍历到数组的某一个值到比tmp值大的,就需要将其整个往后移动一位,并同时插入tmp的值到其数组的那个比tmp值大的位置上。这就是一次插入排序的实现思路。

代码具体实现思路

理解了一次插入排序之后。接下来我们可以先假设其有序数组的最后一个下标为end,那么按照定义数组中下标为0~end的值就是有序的。那么,这时,我们可以设下标为end + 1的为tmp。从tmp开始,让它与前面每个数进行对比,假如比它小,则将其数组整个后移一位,并同时插入tmp的值到数组中比tmp小的值位置上去。直到end的值小于零停止。同时,外面大循环的次数为数组长度减1.

核心实现代码:

void InsertSort(int* a, int n) {


	for (int i = 0; i < n - 1; i++) {

		//a[0]~a[end]有序,把数组下标为end + 1的值插入数组后,数组仍保持有序。
		int end = i;
		int tmp = a[end + 1];

		while (end >= 0) {

			if (tmp < a[end]) {

				a[end + 1] = a[end];
				end--;

			}
			else{
				break;
			}
		}

		a[end + 1] = tmp;
	}


	

}

自己原本对插入排序的理解于代码实现:

以下这张图中,只需要将交换位置思想改为插入向后移动思想就是一个插入排序了。这是最初自己的插入排序思想实现思路,发现和实际的插入排序思想有点差异。这里也放着,好提醒一下思路的形成过程。

/*
	for (int i = 0; i < n - 1; i++) {
		
		int end = n - 1;

		while (end > 0) {
			if (a[end] >= a[end - 1]) {
				end--;
			}

			if (a[end] < a[end - 1]) {
				int tmp = a[end - 1];
				a[end - 1] = a[end];
				a[end] = tmp;
				end--;
			}
		}
	}*/

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值