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

发布 : 优就业IT培训      来源:优就业

2021-06-18 17:25:08

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

1.冒泡排序算法:

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

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

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

  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 = 0; j<arr.length; j++){
  6. // 作比较
  7. if(arr[j] > arr[j+1]){
  8. // 交换位置
  9. var temp = arr[j];
  10. arr[j] = arr[j+1];
  11. arr[j+1] = temp;
  12. }
  13. }
  14. }

打印结果为: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. // 一轮循环结束后,得到本轮循环的最大值,放在最后
  14. }

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

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部