IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> JS实现冒泡法排序 -> 正文阅读

[数据结构与算法]JS实现冒泡法排序

一.冒泡法排序

对一个无序的数组进行排序,方法有很多,然而冒泡法排序也是这众多方法中最为稳定的,也是最为简单的一个排序方法。

此次我就利用js为大家详细讲解一下冒泡法排序吧~


二.思路

有一列数字:

44, 5, 23, 14, 6 , 87?

现在对他进行从大往小排序

排序思路:冒泡法排序中,需要比较n-1轮,n就是这一数列的长度。每一轮中需要将两两相邻的两个数字进行比较,之后对于不满足条件的进行置换位置,听到这里大家是不是觉得很绕,那么请继续往下看。

1.? ? 此次是第一轮比较

首先我们的条件是大到小

?44>5 ,满足条件 便置于前面。此时不用置换位置,因为44本身就在前面。

?5<23,不满足条件,所以就置换位置,5和23置换,就变成了23,5 所以数列成为? 44,23,5,14,6,87

5<14,不满足,5和14置换位置,数列成了44,23,14,5,6,87

5<6 也是一样 进行置换 数列就成了 44,23,14,6,5,87

最后一次比较:5<87 同样还是置换 数列就成了 44,23,14,6,87,5

经过第一轮比较之后 我们就找到了本轮中最小的那一个,也就是这个数列中第1小的,他便被下潜到了最下面

第二轮开始之前,我先给大家理一下思路:

我们每比较一轮时候,就会找到最小的那一个,但是后面的每一轮中这个最小的总是大于上一轮最小的,所以我们就可以确定下来,每经过一轮,那么这个最小的一定是这个数列中第一小的,第二小的,第三小的.....所以自然而然就不用每一轮都要再把这些小的拿进去参与比较。简言之每比较完一轮,所需比较的数字就少一个。所以比较次数就可以看成为 总的轮次减上当前的轮次 所以就是arrleng - i ,arrlenght是总共需要比较的轮次? i是当前轮次

2.? 此次是第二轮比较

经过上一轮 第1小的5我们已经找到 所以本轮比较中我们不用他进行参与 原因上面有讲到

44>23 满足大到小 所以不用置换? ?23>14? 满足大到小 所以不用置换???14>6? 不用置换

6<87? 不满足大到小 置换位置 所以就变成了87,6 所以数列就成为了 44,23,14,87,6

在这一轮比较中,我们找出了这一轮最小的那一个数字6,他也就相当于是第2小?

所以最终数列成为了 44,23,14,87,6,5

?

3.? 此次是第三轮比较:

经过上一轮 第2小的6已经被我们找到 然后第1小的5我们也在第一轮找到 所以我们在本轮中都无需他们的参加??

44>23? ? 23>14? 都满足大到小的条件

14<87 不满足大到小的条件 所以我们进行置换位置? 就变成了87,14,所以数列就成为了44,23,87,14

至此,本轮比较完毕 我们这个数列最终就成为了 44,23,87,14,6,5

?

?4.? 此次是第四轮比较

经过前面几轮,我们分别找到了这个数列中第1小的5第2小的6第3小的14,还是一样本轮以及后面的轮次中都无需他们的参与。

44>23 满足条件大到小条件 所以无需置换

23<87? 不满足大到小条件 所以两两置换 就变成了 87,23 所以数列就成为了 44,87,23

至此本轮比较完毕 我们找到了最小的那一个23 并将它置于最后 数列最终成为44,87,23,14,6,5

?

5.? 此次是第五轮比较

44<87 不满足大到小 所以进行置换? 87,44 所以数列就成为了 87,44

至此本轮比较完毕 数列最终成为了87,44,23,14,6,5?

至此我们排序完毕。这个数列最终成为了 87,44,23,14,6,5?

?

总结

我们一共经过了5轮排序,所以我们就可以确定冒泡法排序需要经过n-1轮排序,然后又由上面我们得知?,每一轮比较中都需要两两相邻进行比较 ,所以我们可以得知 当条件满足时候进行用第3变量然后来置换这两个数值的位置 ,又因为我们从上面知道 每经过一轮 我们就找到了这个数列中第n小的那个数字 所以我们就无需他的参与 那么就可以得知 每一轮中比较次数可以看做为 总轮次-当前轮次 那么就为 arrlength - i?

废话不多说:上代码


三.代码

<script>
		
		var arr=[44, 5, 23, 14, 6 , 87?];
		console.log('原数组:'+arr);
		//无序的整数数组
		var arrlenght = arr.length-1;
		//拿到这个数组的长度 然后减去1获取需要比较的轮数
		var n=0;
		//第三个变量 一会儿用来置换位置时候方便存放
		for(i=0;i<arrlenght;i++){
			//外层控制比较轮数 n-1轮 上面已经拿到了
			for(j=0;j<arrlenght-i;j++){
				/*内层用来控制需要比较多少次
				这里还减去了一个轮数是因为每比较一轮
				我们这个需要比较的数字就少一个*/
				if(arr[j]<arr[j+1]){
					/*相邻进行比较 所以就是j 和 j+1
					所以满足这个条件时候进行置换 大的放前面*/
					//这个是交换变量的通常方法 用第三个变量来替换
					n = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = n;
				}
			}
		}
		console.log('排序后:'+arr);
		</script>


四.总结

冒泡法的排序最重要的思想就是两两相邻进行排序,符合我们要求的条件的便上浮不符合下沉。在我们这次要求中,从大到小,所以符合大到小的就上浮,也就是大在前,小在后,不符合的则下沉,也就是小下沉到最后,大上浮到最上面。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:15:37  更:2022-01-12 00:17:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:38:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码