数据结构和算法-插入排序分析|学习笔记

简介: 快速学习数据结构和算法-插入排序分析

开发者学堂课程【Go 语言核心编程 - 数据结构和算法:数据结构和算法-插入排序分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/627/detail/9849


数据结构和算法-插入排序分析


 内容介绍

一、插入排序法

二、插入排序法思想

三、思想的示意图

 

插入排序的速度会比选择排序更快。

 

一、插入排序法

插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

 

二、插入排序法思想

从代码理解,插入排序要比选择排序更麻烦,但是它的思想很先进,一般来说会比选择排序快一倍,

插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表(意思就是先把第一个元素,因为只有一个元素无论是从小到大还是从大到小它都是有序的),开始时有序表中只包含一个元素,无序表中包含有 n-1个元素(就是把第一个看成是有序的,n-1看成是无序的),排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

 

三、思想的示意图:

image.png

把它画成两个部分,一个部分是演示部分,另一个部分是排序思想。

1. 演示:

假设现在有一个数组,这个数组就当是按小牛的成绩排序,分别是23,0,12,56,34从大到小排序,假设原始的数组是[23,0,12,56,34]

(1)第一次找到插入位置,先是0和23比较,很容易找到位置,这个数组就变成[23,0]12,56,34是无序的

(2)第二次 insertval 的值就变成12,第二次找到插入位置,它如果比0大就后移,那么变完的结果[23,0,0]56,34这时候12已经被保存下来了,让23与12进行比较,是大于12的,位置就已经找到,找到之后,只需要在+1的位置就可以了,就变成[23,12,0]56,34

(3)第三次找到插入位置,并插入,56比0大,就会向后移,这个时候它就变成了[23,12,0,0] 34,移动下标指向12,insertval 还是56,56比12大,说明没有位置,就往后移动,就变成[23,12,12,0],23不大于12就继续向后移动,就变成[23,23,12,0]34,这个时候再向下移动,发现移动不了了,说明它是最大的,但是它还是会稍微移动一下才会退出循环,最后会变成[56,23,12,0]23 ,也就是它会不停的找位置找到之后加进去。但是这个优越的地方是 ,它总是有序数组在找位置,它比较的次数是在减少的。所以插入排序是比冒泡排序和选择排序快的,至少快一倍

(4)第四次也是一样的道理,第四次插入的值就找34就可以,每次都是从最后找。于是就变成[56,23,12,0,0]下标就指向了12,12比34 仍然是小的,所以还没有找到位置,往后面移动就是[56,23,12,12,0]继续向后移动就是[56,23,23,12,0]最后会变成[56,34,23,12,0]

不确定每次比较的次数到底是多少,它可能很快就退出来了,也可能会遍历完才退出,假如最后不是34是-1那比较一次就可以了,如果最后就是最大的,它就得遍历完

2.排序思想:

(1)将23当作是有序的数组

(2)给0找一个位置插入

(3)思路:先把0保存到一个变量 insertval 中,将这个变量插到23这个有序变量中,插入时候就相当于这个值被保存了,现在它的指针就指向它前一个位置,就是0的前一个位置,然后将插入的位置用一个变量保存,就是0的下标的前一个下标

(4)从后开始比较,给 insertval 找到一个位置,插入  

(5)找的过程中有序数组的元素位置是要后移的

相关文章
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
72 4
|
16天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
43 1
|
2月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
23 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
2月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
3月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
3月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
54 1
|
2月前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
2月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
2月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
44 0