初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度

这篇具有很好参考价值的文章主要介绍了初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

 第一章 初阶算法(1):通过简单的排序算法来认识时间复杂度

 第二章 初阶算法(2):进行详细地介绍插入排序的细节和复杂度

 第三章 初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用 


目录

系列文章目录

前言

一、插入排序的介绍(用例子)

二、为什么插入排序和冒泡(选择)排序不一样

总结


前言

       回顾一下上一篇讲了一个什么内容?讲述了时间复杂度额外空间复杂度,在时间复杂度中,描述了如何比较算法流程哪个更快,又介绍了选择排序。如果想要看第一章的话,请点击:算法:通过简单的排序算法来认识时间复杂度 进行观看。

       下面,小编我要进行介绍另一个排序:插入排序。插入排序是小编不太清楚的,没有冒泡排序和选择排序熟悉,通过今日的学习,进行了解和深入,希望这篇博客可以将我所学到的精髓展示出来。


一、插入排序的介绍(用例子)

       插入排序没有冒泡排序和选择排序那么傻,他还是需要一些技巧的。下面请看图:还是利用英雄从哪里来的图形:(英雄从哪里来大佬写的算法)。

初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度,初阶算法,算法

       插入排序基本上是在0到j上进行比较将j位置上的数与比j位置小的数进行一一比较,如果比他小/大,则进行交换数字由上面的图形可以清楚的看到。下面进行代码实现:

for (int i = 0; i < n -	1; i++) //做到有序
{
	for (int j = i ; j >= 0 && arr[j + 1] < arr[j]; j--)  //j+1位置的数永远是要处理的数
	{
        //这种交换方式在后面进行讲解
        //arr[j] = arr[j] ^ arr[j + 1];
		//arr[j + 1] = arr[j] ^ arr[j + 1];
		//arr[j] = arr[j] ^ arr[j + 1];
        //交换变量
		int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
	}
}

二、为什么插入排序和冒泡(选择)排序不一样

       选择排序和冒泡排序的时间复杂度和数据状况完全是无关的是一个严格的流程,数据状况不管是什么样,都需要进行操作

       举个例子:选择排序,第一步在0到N-1上,不管是什么数据状况都需要进行一遍,然后进行第二步,然后......不管数据状况是好是坏,时间复杂度是没有发生变化的冒泡排序也如此,在0到N之间,进行两个数之间的比较,与数据状况无关。

        而插入排序的时间复杂度和数据状况是有关

       举个例子:用一个情况最糟的数据:7 6 5 4 3 2 1,用插入排序的时间复杂度为O(N^2),如果用一个有序的数据:1 2 3 4 5 6 7只用将前一个数与后一个数进行比较,不用交换,用插入排序的时间复杂度为O(N)。

       由第一章内容可知,插入排序的时间复杂度为O(N^2),虽然时间复杂度与其他两个排序的时间复杂度是一样的,但是插入排序在常数级别的操作比那两个排序更优,因为不是每次数据都是情况最糟的。 


总结

       以上就是今天要讲的内容,本文介绍了插入排序和其时间复杂度,希望大家看完以后,进行点评,谢谢大家!文章来源地址https://www.toymoban.com/news/detail-636411.html

到了这里,关于初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包