java数组从小到大排序_算法与数据结构基础<二>排序基础之选择排序法

最简单的排序算法:选择排序法:

在上一次线性查找法来了个算法的开篇,介绍了线性查找法的简单算法,这次继续夯实基础,而排序就是算法中非常基础又非常重要的算法,如题所示,这里先来学习最最简单的排序算法----选择排序。

思想:

它的排序思想比较简单:

99cd1d971a9df94cefccfaf856257f38.png

过程分析:

对于它的实现其实是有两种,咱们先来看一下这两种的实现过程,基本这块都比较熟了,就当复习巩固。这里以如下整型数组为例进行分析:

564da4d5e6c3fb127188d4382a5767fa.png

实现方案一:借助临时数组

1、找最小的元素:

da8618ecc90f73f4a00d935fd2bba10d.png

然后将这个元素放到一个新数据中:

1d3450e50a9723b2538d0a91dabce3de.png

2、从剩下的元素中还是找最小的元素:

d5d3a9c62d5b0a6353ad982704c22826.png

将其放到新数组中:

1da94f415659b6dccce6cbc0ed6a2b9a.png 

3、继续找最小的元素:

6045a976bb17b94009b05b89abfeabb8.png

往新数组放:

11713e6319577d5c188d9112f7d278e1.png

4、继续找最小的元素:

12b43dd597e907ff4b05651c45eb01b6.png 

放:

5e5b5ff2dd1ce2eb10ff0d4b13a909e8.png 

5、

552e38e606cbd9a9bf377f3be88ddc87.png

放:

019bda7f62bf21725e397e94294481c0.png

6、还剩最后一个元素,整个排序完成:

ae53408b56b0f5bf5d621662de018ecc.png

放:

84736b8d67ba74f3bd3dd901f15b36f4.png

对于这种排序实现可以看出会占用一个额外数组空间:

30088dce7abcc8baf247b4d5d19ba5b9.png

那有木有一种实现方式不额外申请空间也能达到同样的效果呢?其实在算法中这种思想可以称为“原地排序”,在未来的算法学习中也可以看到很多的算法可以实现原地排序,有些是必须借助额外空间才行的,对于咱们这种算法妥妥的是可以进行原地排序的,下面走起。

实现方案二:不借助临时数组原地排序

还是对于这样一个数组:

56dfa3fc0a5d182e19a6ea9e26633612.png

1、当前元素为第0个:

feec0739e14039b7069edbb4e8dfb59a.png

接下来从数据元素中找到一个最小的元素,此时得借助另一个下标:

a7a2589ac39c3235fc23de63b0f27912.png 

然后这个j会遍历所有元素进行最小值的查找:

5a5c1c5464922946c3791294609822ef.png

此时就找到了数组中最小的那个了,用一个变量记录一下下标:

9bab913c70c6307fadc834fde487b65a.png

此时将数组中i位置和minIndex位置中的元素原地进行一下交换:

9db2fbf692b26bd5fd89f9c1b9241802.png

此时当前下标为i的位置的元素就已经是整个数组中最小的那个元素了,所以:

eda8d4eb7e8c18ae0d1fa98c28ef24be.png

2、i++再来往后进行处理,i=1:

5f1c0e6c624fa9cbbad6fc98329de657.png

同样的思路,此时的j扫描位置从i开始:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值