欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C语言深入浅出讲解直接插入排序算法的实现

时间:2022-06-29 09:22:49|栏目:C代码|点击:

插入排序分为两种:直接插入排序&希尔排序

直接插入排序

1.基本思想

直接插入排序是一种简单的插入排序算法,其基本思想是:

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。

说得通俗一点就是:

假设区间[0, end]有序,将end+1位置的值插入到[0, end]中,保持区间[0, end+1]依旧有序。

生活中我们玩扑克牌时,就用了插入排序的思想。

在这里,我们以排升序为例。

核心思想:摸牌的过程

动图演示:

2.算法实现

写排序时,先从单趟开始考虑

//[0, end]已经有序,将end+1位置的值插入到[0,end]中,使得[0,end+1]依旧保持有序
//有一个有序区间,插入一个数据,依旧保持有序
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n - 1; i++)
	//控制摸牌的过程,一开始从仅一张开始
	//注意循环结束条件,只需要到n-2的位置,若将其改成i<n,则会出现越界的情况
	{
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)//保证牌是有序的
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];//往后挪,注意画图感受哦
				end--;
			}
			else
			//有两种可能:(现想常规的,再考虑特殊情况)
			//一是找到了比它小的数,放到其后;
			//二是没有比它小的数,直到end为-1才结束
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}

完整代码:

3.时间复杂度

直接插入排序时间复杂度是O(N^2),注意哦,不是因为双重循环,需要实际计算来得出时间复杂度。

最坏情况:逆序有序,1+2+3+……+n - 1;O(N^2)

最好情况:顺序有序,1+1+1+……+1。O(N)

上一篇:C语言简单实现三子棋游戏

栏    目:C代码

下一篇:C++优先队列用法案例详解

本文标题:C语言深入浅出讲解直接插入排序算法的实现

本文地址:http://www.codeinn.net/misctech/206309.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有