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

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

前言

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


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


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

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

4d5d54dcbc7b47b18c45e0a23b906780.gif

   插入排序基本上是在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),虽然时间复杂度与其他两个排序的时间复杂度是一样的,但是插入排序在常数级别的操作比那两个排序更优,因为不是每次数据都是情况最糟的。


总结

      以上就是今天要讲的内容,本文介绍了插入排序和其时间复杂度,希望大家看完以后,进行点评,谢谢大家!


相关文章
|
2月前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
80 6
|
4月前
|
机器学习/深度学习 算法 程序员
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
本文是作者阅读《趣学算法》后的笔记,介绍了算法复杂度的基本概念,包括时间复杂度和空间复杂度的不同阶表示,并通过具体例子展示了如何计算和理解算法的效率。
70 2
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
|
2月前
|
搜索推荐 算法
插入排序算法的平均时间复杂度解析
【10月更文挑战第12天】 插入排序是一种简单直观的排序算法,通过不断将未排序元素插入到已排序部分的合适位置来完成排序。其平均时间复杂度为$O(n^2)$,适用于小规模或部分有序的数据。尽管效率不高,但在特定场景下仍具优势。
|
5月前
|
机器学习/深度学习 存储 算法
颠覆认知!Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【7月更文挑战第22天】在Python算法设计中,时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法,还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储,但也反映内存效率。平衡二者需视场景而定,如利用原地算法减少内存消耗,或牺牲空间加速执行。算法优化技巧,如分治与动态规划,助你在资源与速度间找寻最优解,从而高效应对大数据挑战。
57 3
|
2月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
41 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
24 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
2月前
|
存储 算法
算法的时间复杂度和空间复杂度
本文详细讨论了算法的时间复杂度和空间复杂度,包括它们的概念、计算方法和常见复杂度的对比,并通过多个实例解释了如何计算算法的时间和空间复杂度。
159 0
算法的时间复杂度和空间复杂度
|
3月前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
42 4
|
2月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
2月前
|
算法 C语言
深入理解算法效率:时间复杂度与空间复杂度
深入理解算法效率:时间复杂度与空间复杂度