美文网首页
交换排序算法--冒泡排序

交换排序算法--冒泡排序

作者: 脑袋炸了 | 来源:发表于2017-07-04 14:28 被阅读0次

交换排序有2种,冒泡排序和快速排序

这里先谈冒泡排序,冒泡排序的原理是什么?

大的数往下沉,小的数往上冒。通俗来讲,就是对相邻的2个数做比较,如果前一个数比后一个数大,交换他们的位置,最后达到大的数在后面,小的数在前面的效果;

还是用代码来讲解,写一个函数:


function maopao(arr){

    for(var j = 0;j < arr.length-1;j++){

        for(var i = 0;i < arr.length-1;i++){

            if (arr[i] >arr[i+1]) { //前一个数大于后一个数,交换

                  var tmp = arr[i];

                  arr[i]=arr[i+1];

                  arr[i+1] = tmp; 

            }

        }

    }

    return arr;

}


当然这个是最传统的冒泡排序,这种排序方式的结果是无论对什么数组,都需要进行完整的n * n次for循环。这里有2种改进方式,让他的循环次数少一些。

第一种:我们设置一个变量pos,让它来记录一次循环之后最后交换的位置,而pos后面的数不需要交换了。当pos等于0的时候,说明整个数组已经没有要交换的了。

接下来我们看看代码怎么实现,依然是写一个函数:


function maopao1(arr){

      var n  = arr.length-1; 

     while(n>0){     

          var pos = 0;

          for(var i = 0; i < n; i++){

              if(a[i]>a[i+1]){

                     pos = i; //记录pos,由于for循环会走完,所以pos记录的是此次循环最后的i值

                     var a = arr[i];

                     arr[i] = arr[i+1];

                     arr[i+1]=a;

               }

          }

         n = pos; //下次循环就只到pos了

     }

    return arr;

}


上面是第一种改进方式,接下来说说第二种改进方式。

冒泡排序的一次循环可以排出数组的最大值最小值,那我们试着用2个循环求出最大值最小值。然后就不再去管最大值和最小值了,每次循环就少计算2个数。

代码来看,写一个函数:


function maopao2(arr){

     var max = arr.length-1;

     var min = 0;

     if (max>min) {

          for(var i = min; i < max;i++){

              if (arr[i] > arr[i+1]) {

                   var a = arr[i];

                   arr[i] = arr[i+1];

                   arr[i+1]=a;

              }

          }

          max--;

          for(var i = max; i > min;i--){

               if (arr[i] < arr[i-1]) {

                    var a = arr[i];

                    arr[i] = arr[i+1];

                    arr[i+1]=a;

               }

          } 

          min++;

     }

      return arr;

}


相关文章

  • 排序算法

    排序算法 冒泡排序 选择排序 直接插入排序 希尔排序 堆排序 归并排序 快速排序 冒泡排序 冒泡排序是一种交换排序...

  • 冒泡排序算法

    冒泡排序(Bubble Sort)算法是所有排序算法中最简单、最基本的一种。冒泡排序算法的思路就是交换排序,通过相...

  • 冒泡算法/选择排序算法/直接插入排序算法C语言实现

    排序算法 冒泡排序 选择排序 冒泡排序和选择排序的核心思路: 冒泡排序是:相邻两个元素两两进行比较,小则交换位置。...

  • 冒泡排序

    1 .算法思想冒泡排序是一种简单的交换类排序算法,能够将相邻的元素进行交换,从而逐步将待排序序列变成有序序列。冒泡...

  • 经典算法---排序(摘抄)

    一、排序算法 前言:常见排序算法分类 非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 冒泡排序

    冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (...

  • 排序算法 (八)冒泡排序

    排序算法(八)冒泡排序   冒泡排序(Bubble-Sort)是一种最基础的交换排序。冒泡排序的原理:从第一个数开...

网友评论

      本文标题:交换排序算法--冒泡排序

      本文链接:https://www.haomeiwen.com/subject/eiathxtx.html