Js的冒泡排序和选择排序

今天我们简单讲解一下冒泡排序和选择排序的实现。

        首先我们需要清楚冒泡排序和选择排序是什么?

        排序顾名思义就是把一个乱序的数组,通过我们的处理,让它变成一个有序的数组。

我们先来看一下冒泡排序:

        冒泡排序的逻辑:

  • 先遍历数组,让挨着的两个进行比较,如果前一个比后一个大(如果前一个比后一个小,也一样,只不过一个是实现从小到大排序,一个是实现从大到小排序),那么就把两个互换位置。
  • 数组遍历一遍之后,那么最后一个数字就是最大的那个
  • 然后再进行遍历,按照之前的规则,我们知道第二大的数字就会跑到倒数第二的位置。
  • 以此类推,最后就会按照顺序把数组排列好了。(仔细思考,我们会发现在后面进行排时,前面已经排好的数字已经不需要再进行比较了)

        下来我们开始编写代码:

        1.我们先准备一个乱序的数组

         2.接下来,我们需要知道两个数怎么互换位置

假设我们现在需要数组的第一位和第二位互换位置,我们需要借助一个中间变量,代码如下:

         3.我们的准备工作已经做好了,接下来开始第一次遍历数组

遍历完毕:因为要进行 i + 1 的操作,所以结束条件写成了 i < arr.length - 1

         4.接下来我们按照数组的长度进行遍历

这里我们需要注意的是,当我们把数组的数字排列好的只剩一个数字是,那么那个数字就不需要在进行排序,它就是最大的或着最小的。所以我们的外层for循环的结束条件是 j < arr.length - 。

我还需要注意的是,当我们第一次循环了之后,已经把最大的数字排列在最后面,而第二次之后把第二大的数字排列在倒数第二的位置,这样我们再进行排序的时候发现,未排序的数字和排序好的数字就不要再进行比较了,因为即使比较了也不会互换位置,所以我们这里的内部for循环的结束条件就是 i < arr.length - 1 - j。至此一个冒泡排序就结束了,大家快去试一试。

 我们再来看一下选择排序:

  • 选择排序的逻辑:
  • 先假定数组中的第0个就是最小的数字的索引
  • 然后遍历数组,只要有一个比我小的数字,那么就替换之间记录的索引
  • 遍历数组结束之后就可以找到最小的数的索引,然后将最小的数换到第0个的位置
  • 再来一遍遍历,因为第一个位置已经排列好,就假定第二个位置是最小的数,再来一遍找到第二小的数的索引,然后换位置
  • 以此类推,就把数组排列好了

        1.同样的我们先准备一个乱序的数组

        2.假定数组中的第0个(也就是第一个)是最小数,索引就是0

         3.遍历数组,判断,只要数字比我小就将其索引赋值给minIndex,遍历完毕后再互换两个数位置

         4.同样的按照数组的长度重复执行上面的代码

                

 同样的道理,现在数组的长度是9,我们排列玩8个数字之后,最后一个数就不需要再进行过排序了,所以外层for循环的结束条件是 j < arr.length - 1。我们发现,我们排列第一个数字的时候是假定第一个数字最小索引是0,排列第二个数字的时候,是假定第二个数最小,索引是1,都是和下一个数字比较,所以我们将代码进行了优化如: minIndex = j ,var i = j + 1 , arr[minIndex] = arr[j] , arr[j] = temp 至此一个选择排序就完成了,如下图

 大家可以试试用两个排序实现从大到小的排序效果!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值