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 至此一个选择排序就完成了,如下图
大家可以试试用两个排序实现从大到小的排序效果!!!
Js的冒泡排序和选择排序相关推荐
- js实现冒泡排序,快速排序,选择排序
用js冒泡排序,快速排序,选择排序 1.冒泡排序 冒泡排序是比较经典的排序方法,是一种用时间换空间的排序方法.我总结了一下它的特点:(1)它的时间复杂度是:(2)每一趟相邻元素两两比较完毕就会产生最值 ...
- JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)
JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...
- 算法与数据结构(冒泡排序,选择排序和插入排序的总结)
冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...
- JavaSE(二十四)——冒泡排序、选择排序、直接插入排序以及二分查找
文章目录 1. 冒泡排序 2. 选择排序 3. 直接插入排序 4. 二分查找 1. 冒泡排序 原理:数组元素两两比较,大的往后放,经过一轮比较后,最大元素在最后面,如此往复. 举例说明: 代码: // ...
- 冒泡排序、选择排序和插入
冒泡排序.选择排序和插入排序代码如下: package cn.luxh.app.test;public class SimpleSortUtil {/*** 冒泡排序* 从小到大排序* 思路:* 1) ...
- C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
- 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
一直在犹豫要不要写排序的文章,因为真的烂大街了.可是一旦细看,还真是很多值的思考的地方,所以还是选择记录一下 以下完整代码,均可从这里获取 https://github.com/Rain-Life/d ...
- Python排序算法(一)冒泡排序、选择排序、插入排序
今天总结一下Python中的排序算法.这篇文章有的排序算法是:冒泡排序.选择排序.插入排序. 冒泡排序 先看一下代码. ''' 冒泡排序 '''def bubble_sort(aList):n = l ...
最新文章
- android 开机启动服务。
- NSString,最美的创建方式也最毒
- 代码质量管控的四个阶段
- iptables记录日志
- Byshell:无进程无DLL无硬盘文件无启动项
- HTTP 和 SOCKS 代理有什么区别,指纹浏览器搭配哪种代理合适
- ubuntu linux拼音输入法,Ubuntu 中文拼音输入法小结
- 求x的n次方编程_c语言求x的n次方的函数介绍
- 使用Python发送邮件(图片、表格、附件) 系列二: 同时发送图片和附件实际案例
- python tkinter ttk的使用(下)
- 火狐浏览器打开IE窗口/IE跳谷歌页面等 --- 自定义协议---手动执行注册表
- artDialog对话框组件使用方法
- 轮播图展示与轮播图管理
- 【详细】小程序发微博功能实现
- 赵小楼《天道》《遥远的救世主》深度解析(110)不神之神是谓真神
- AntDB基于WAL日志的DML数据闪回实现
- 清华大学视频:ARM微控制器与嵌入式系统
- css selector什么意思
- 玩cf出现outofmemory_穿越火线出现out,穿越火线outofmemory
- Win10激活Office2013的技巧