400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > web前端 > 【Web前端基础知识】冒泡排序和选择排序

【Web前端基础知识】冒泡排序和选择排序

  • 发布: 优就业it培训
  • 来源:优就业
  • 2021-06-18 17:25:08
  • 阅读()
  • 分享
  • 手机端入口

冒泡排序和数组排序是比较常见的数组排序算法

1.冒泡排序算法:

冒泡排序法是最基本的排序法之一,冒泡排序法的核心思想就是通过循环遍历元素,每次比较的是相邻两项的数,并根据其比较大小的结果调整这两项位置,一次循环之后可以得到当前循环的较大值。经过一轮循环并不能对该数组排序完成,所以我们的数组有多长就要有多少次循环,要在外进行嵌套一次for循环,但这个外循环只是用来控制比较次数的,没有参与实际的比较。

冒泡排序就是让大数上浮,小数下沉,形式就像深海里的泡泡,也因此称之为是冒泡排序。

例如我们有如下数组,使用冒泡排序算法的代码为:

  1. var arr = [10,5,3,7,9,4,2,8,6]; 
  2.  
  3.         // 外循环只是控制循环的次数,没有参与实际意义上的比较 
  4.         for(var i = 0; i<arr.length; i++){ 
  5.             // 每次比较相邻的两项 一轮循环 
  6.             for(var j = 0; j<arr.length; j++){ 
  7.                 // 作比较 
  8.                 if(arr[j] > arr[j+1]){ 
  9.                     // 交换位置 
  10.                     var temp = arr[j]; 
  11.                     arr[j] = arr[j+1]; 
  12.                     arr[j+1] = temp; 
  13.                 } 
  14.             } 
  15.         } 

打印结果为:console.log(arr);//[2, 3, 4, 5, 6, 7, 8, 9, 10]

冒泡排序的整体代码已经实现,实际上我们可以对其做一些优化,在内循环的比较时,每一轮循环结束之后,我们都会得到一个较大的值,放在最后边,那么在下次循环进行比较时已经没有和后面的值作比较的意义了,因为也比不过,也不会进行交换位置。因此可以在内循环的结束条件上进行一个优化,让j<arr.length-i;

  1. // 外循环只是控制循环的次数,没有参与实际意义上的比较 
  2.         for(var i = 0; i<arr.length; i++){ 
  3.             // 每次比较相邻的两项 一轮循环 
  4.             for(var j = 0; j<arr.length-i; j++){ 
  5.                 // 作比较(升序排列) 
  6.                 if(arr[j] > arr[j+1]){ 
  7.                     // 交换位置 
  8.                     var temp = arr[j]; 
  9.                     arr[j] = arr[j+1]; 
  10.                     arr[j+1] = temp; 
  11.                 } 
  12.             } 
  13.             // 一轮循环结束后,得到本轮循环的最大值,放在最后 

2. 选择排序的思想是选择第一项,后后面的所有项作比较,比后面的一项大,交换位置,之后选择第二项,后后面的所有项作比较,比后面的一项大(升序排列),交换位置...,以此类推。

也就是从第一项开始,选择该项和后面的所有项进行比较,后面的所有项也需要依次循环,所以在原本的for循环中需要在嵌套一个for循环,在内循环中我们的初始条件为被选中作为比较元素的后一位,即i+1;

例如我们有如下数组,使用选择排序算法的代码为:

  1. var arr = [10,5,3,7,9,4,2,8,6]; 
  2.         // 外循环控制作为比较的项 
  3.         for(var i = 0; i<arr.length; i++){ 
  4.             // 内循环依次和后面的项作比较 
  5.             for(var j = i+1; j<arr.length; j++){ 
  6.                 // 作比较(升序排列) 
  7.                 if(arr[i] > arr[j]){ 
  8.                     // 交换位置 
  9.                     var temp = arr[i]; 
  10.                     arr[i] = arr[j]; 
  11.                     arr[j] = temp; 
  12.                 } 
  13.             } 
  14.         } 

打印结果为: console.log(arr);//[2, 3, 4, 5, 6, 7, 8, 9, 10

学习疑问申请解答
您的姓名
您的电话
意向课程
 

中公优就业

IT小助手

扫描上方二维码添加好友,请备注:599,享学习福利。

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,享学习福利
QQ交流群
在线疑问解答
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
享学习福利

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道