❤️深入解析链表和数组的区别❤️ 算法图解:第二章:选择排序

举报
是Dream呀 发表于 2022/01/15 12:46:23 2022/01/15
【摘要】 ❤️深入解析链表和数组的区别❤️ 算法图解:第二章:选择排序

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜
🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

@TOC

2.1内存的工作原理

计算机就像是很多抽屉的集合体,每个抽屉都有地址。
需要将数据存储到内存时,有两种基本的存储方式:数组和链表。但他们之间也各自有缺点和优点。

2.2数组和链表

2.2.1链表

链表的元素可存储在内存的任何地方。
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
比如你去寻宝时,你前往地址112,那里有一张纸条,写着:下一个元素地址是558,以此类推。在链表中添加元素也很容易:只需要将其放入内存,并将地址存储到前一个元素中。

2.2.2数组

链表必须先访问元素#1才可以访问元素#2,以此类推,但如果你需要跳跃,链表的效率真的很低。
数组与此不同:你知道每个元素的地址。
需要随机读取元素时,数组的效率很高,因为可以迅速找到数组的任何元素。在链表中,元素并非靠在一起,你必须依次访问。

2.2.3术语

数组元素带有编号,编号不是从1开始,而是从0开始。
元素的位置称为索引。因此,不说“元素20的位置为1”,而是说“元素20位于索引1处”

2.2.4在中间插入

需要中间插入元素时,使用链表会更简单,只需要修改它前面的那个元素的地址指向。而是用数组时,则必须将后面的元素都向后移。
如果没有足够的空间,可能还得将整个数组复制到其他地方!因此,当需要在中间插入元素时,链表是最好的选择。

2.2.5删除

删除 链表也是最好的选择,使用数组时,删除元素后,必须将后面的元素都往前移。不同于插入,删除总能成功。在这里插入图片描述

2.3选择排序

请添加图片描述
需要的总时间:O(n**2)

随着排序的进行,每次需要检查的元素在逐渐减少,最后一次需要检查的元素为1个,运行时间为啥还是O(n**2)呢?其实用大O表示法省略1/2这样的常数,可以简单的写作O(n*n)
示例代码:

#先编写一个找出数组中最小元素的函数
def findSmallest(arr):
    smallest=arr[0]
    smallest_index=0
    for i in range(1,len(arr)):
        if arr[i]<smallest:
            smallest=arr[i]
            smallest_index=i
    return smallest_index
#用这个函数来编写选择排序算法:
def selectionSort(arr):
    newArr=[]
    for i in range(len(arr)):
        smallest1=findSmallest(arr)
        newArr.append(arr.pop(smallest1))
    return newArr
print(selectionSort([8,9,5,6,4,1,2]))

2.4小结

1.计算机内存犹如一大堆抽屉
2.需要存储多个元素时,可以使用数组或者链表
3.数组的元素都在一起
4.链表的元素是分开的,其中每个元素都存储了下一个元素的地址
5.数组的读取速度很快
6.链表的插入和删除速度很快
7.在同一个数组中,所有元素的类型必须相同(都为int或者double等)。

在这里插入图片描述
好啦,这就是今天要给大家分享的全部内容了
如果你喜欢的话,就不要吝惜你的一键三连了~在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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