跟着动画学Go数据结构之插入排序 #私藏项目实操分享#

举报
宇宙之一粟 发表于 2022/01/15 01:15:19 2022/01/15
【摘要】 插入排序 插入排序,英文名(insertion sort)是一种简单且有效的比较排序算法。 思想:在每次迭代过程中算法随机地从输入序列中移除一个元素,并将改元素插入待排序序列的正确位置。重复该过程,直到所有输入元素都被选择一次,排序结束。 插入排序有点像小时候我们抓扑克牌...

插入排序

插入排序,英文名(insertion sort)是一种简单且有效的比较排序算法。

思想:在每次迭代过程中算法随机地从输入序列中移除一个元素,并将改元素插入待排序序列的正确位置。重复该过程,直到所有输入元素都被选择一次,排序结束。

插入排序有点像小时候我们抓扑克牌的方式,如果抓起一张牌,我们放在手里;抓起第二张的时候,会跟手里的第一张牌进行比较,比手里的第一张牌小放在左边,否则,放在右边。

因此,对所有的牌重复这样的操作,所以每一次都是插入最正确的排序顺序,直到牌抓完为止。

跟着动画学Go数据结构之插入排序 #私藏项目实操分享#_插入排序

假设我们需要从小到大进行排序:

跟着动画学Go数据结构之插入排序 #私藏项目实操分享#_排序算法_02

Go 代码实现

package mainimport "fmt"func main() {    arrays := []int{6, 2, 5, 8, 9, 3, 1}    length := len(arrays)    insertionSort(arrays, length)    for i := 0; i < length; i++ {        fmt.Printf("%d ", arrays[i])    }}func insertionSort(unsorted []int, length int) {    for i := 0; i < length; i++ {        var insertElement = unsorted[i]        var insertPosition = i        for j := insertPosition - 1; j >= 0; j-- {            if insertElement < unsorted[j] {                unsorted[j+1] = unsorted[j]                insertPosition--            }        }        unsorted[insertPosition] = insertElement    }}
        
[Running] go run "e:\Coding Workspaces\LearningGoTheEasiestWay\Go 数据结构\main.go"1 2 3 5 6 8 9
        

总结

插入排序实现简单,理解也较容易,数据量较少时效率高,算法的实际运行效率优于选择排序和冒泡排序。

算法的最坏时间复杂度为

跟着动画学Go数据结构之插入排序 #私藏项目实操分享#_时间复杂度_03
,如果输入的序列已经预排序,则时间复杂度最优情况 
跟着动画学Go数据结构之插入排序 #私藏项目实操分享#_时间复杂度_04
d 是反转的次数。

空间复杂度为 

跟着动画学Go数据结构之插入排序 #私藏项目实操分享#_插入排序_05
,即不输入借助其他的辅助空间。

插入排序是稳定的排序算法,在键值相同时它能够保持输入数据的原有次序。

文章中使用的可视化工具:​​https://visualgo.net/zh​

文章来源: blog.csdn.net,作者:宇宙之一粟,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yuzhou_1shu/article/details/122476740

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。