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

 更新时间:2022年05月18日 10:53:02   作者:安然无虞  
插入排序也是最简单的一类排序方法,我今天介绍的也是插入排序里最直观且浅显易懂的直接插入排序。对这个很简单的排序,记得当时也是花了近两个晚上才搞懂它的原理的,接下来就来介绍一下

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

直接插入排序

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++编辑距离(动态规划)

    这篇文章主要介绍了C++编辑距离(动态规划),编辑距离是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数,限免详细内容,需要的小伙伴可以参考一下
    2022-01-01
  • C++ 标准模板库 STL 顺序容器详解

    C++ 标准模板库 STL 顺序容器详解

    这篇文章主要介绍了C++ 标准模板库 STL 顺序容器详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • VS2019配置BOOST的方法(v1.70.0库)

    VS2019配置BOOST的方法(v1.70.0库)

    这篇文章主要介绍了VS2019配置BOOST的方法(v1.70.0库),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • C++缺省参数、函数重载与引用深入解析

    C++缺省参数、函数重载与引用深入解析

    缺省参数函数重载以及引用的出现是为了补充C语言语法的不足以及对C语言设计不合理的地方进行优化,引用的出现大大降低了我们学习C语言时相对于指针的难度,也便于我们更好的理解和使用,感兴趣的朋友一起看看吧
    2024-04-04
  • C语言结构体指针的具体使用

    C语言结构体指针的具体使用

    结构体指针是一种非常有用的数据类型,它可以让我们更方便地操作结构体,本文主要介绍了C语言结构体指针的具体使用,非常具有实用价值,需要的朋友可以参考下
    2023-05-05
  • C语言中枚举与指针的实例详解

    C语言中枚举与指针的实例详解

    这篇文章主要介绍了 C语言中枚举与指针的实例详解的相关资料,希望通过本文大家能够掌握枚举与指针的知识,需要的朋友可以参考下
    2017-09-09
  • C语言qsort函数使用方法详解

    C语言qsort函数使用方法详解

    qsort是一个库函数,基于快速排序算法实现的一个排序的函数,下面这篇文章主要给大家介绍了关于C语言qsort()函数使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • c语言中字符串函数(库函数使用)和模拟实现图文教程

    c语言中字符串函数(库函数使用)和模拟实现图文教程

    C语言中对字符和字符串的处理很是频繁,但是C语言本身并没有字符串类型,这篇文章主要给大家介绍了关于c语言中字符串函数(库函数使用)和模拟实现的相关资料,需要的朋友可以参考下
    2024-01-01
  • C++实现浮点数精确加法

    C++实现浮点数精确加法

    这篇文章主要为大家详细介绍了C++实现浮点数精确加法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C 语言基础教程(我的C之旅开始了)[八]

    C 语言基础教程(我的C之旅开始了)[八]

    C 语言基础教程(我的C之旅开始了)[八]...
    2007-02-02

最新评论