算法图解之选择排序

选择排序

在进行排序之前我们有必要知道两种基本的存储多项数据的方式—数组和链表。以下是二者的优缺点:

数 组

优 点:

可以知道每个元素的地址,方便对元素进行修改,随机存取元素的效率高。总而言之,它擅长随机访问。

缺 点:

  • 额外请求的内存可能用不上,别人也用不了,这将大大浪费内存。
  • 如果需要的内存超过申请的内存,在这里可以理解成数组的长度,需要进行数据的转移。显然,这是很麻烦的。
链 表

优 点:
主要优点在于插入,删除元素方面,不需要移动元素,只需要将其放入内存,并将其地址存储到前一个元素中。
缺 点:
读取数据的时候需要从第一个元素开始,根据里面存储的地址,顺式找下一个元素在内存中的位置

下面列出了常见数组和链表操作的运行时间:
在这里插入图片描述

选择排序

假设你的计算机存储了很多乐曲。对于每个乐队,你都记录了其作品被播放的次数。

在这里插入图片描述
你要将这个列表按播放次数从多到少的顺序排列,从而将你喜欢的乐队排序。该如何做呢?

  • 一种办法是遍历这个列表,找出作品播放次数最多的乐队,并将该乐队添加到一个新列表中。

在这里插入图片描述
依次找出第二大,直到重新从大到小排好。如下图所示:在这里插入图片描述
要找出播放次数最多的乐队,必须检查列表中的每个元素。正如你刚才看到的,这需要的时间为O(n)。因此对于这种时间为O(n)的操作,你需要执行n次。在这里插入图片描述
需要的总时间为 O(n × n),即O(n2)。

**随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。既然如此,运行时间怎么还是O(n2)呢?**这个问题问得好,这与大O表示法中的常数相关。

你说得没错,并非每次都需要检查n个元素。第一次需要检查n个元素,但随后检查的元素数依次为n-1, n-2, …, 2和1。平均每次检查的元素数为1/2 × n,因此运行时间为O(n × 1/2 × n)。

但大O表示法省略诸如1/2这样的常数(有关这方面的完整讨论,请参阅第4章),因此简单地写作O(n × n)或O(n2)

选择排序是一种灵巧的算法,但其速度不是很快。

示例如下:
在这里插入图片描述

结果如下:、

结果如下片描述
大家可以参考此链接:https://blog.csdn.net/ysjian_pingcx/article/details/8656048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值