js的排序算法

 

1.用数组实现排序

function ArrayList(){
      var array=[];
  }

2.冒泡排序

  从第一个开始,进行两两排序,如果后面的小于前面的,进行交换。

 ArrayList.prototype.swap=function(m,n){
      var temp=this.array[m]
      this.array[m]=this.array[n]
      this.array[n]=temp
  }

  // 冒泡排序 (n-1)+(n-2)+(n-3)+...+1=N*(N-1)/2
  ArrayList.prototype.bubblesort=function(){
      var length=this.array.length
      for(var j=length-1;j>=0;j--){
          for(var i=0;i<j;i++){
              if(this.array[i]>this.array[i+1]){
                  this.swap(i,i+1)
              }
          }
      }
  }

 3.选择排序

   1.直接选择排序,从min=0开始,查找最小的值与min进行交换(4,3,2,1)min=0,值为4,第一轮查找,变为(1,3,2,4)

                               第一轮完毕min=1,将最小值与min值进行交换  第二轮min=1,从3开始查,变为1,(2,3,4).

                              第三轮1,2,(3,4)

 // 选择排序n*(n-1)/2
  ArrayList.prototype.selectionSort=function(){
      // q.获取数组的长度
      var length=this.array.length
      for(var j=0;j<length-1;j++){
          var min=j
          for(var i=min+1;i<length;i++){
              if(this.array[min]>this.array[i]){
                  min=i
              }
          }
          this.swap(min,j)
      }
  }

4.插入排序

   3,6,4,2,11,10,5

  第一轮:将3与6做比较 3,6,4,2,11,10,5

  第二轮:将4与3,6做比较,3,4,6,2,11,10,3

  第三轮:将2与3,4,6做比较2,3,4,5,11,10,3

 // 插入排序 n*(n-1)/4
  ArrayList.prototype.insertionSort=function(){
      var length=this.array.length
      for(var i=1;i<length;i++){
          // 和前面的数据依次进行比较
          var temp=this.array[i]
          var j=i
          while(this.array[j-1]>temp&&j>0){
              this.array[j]=this.array[j-1]
              j--
          }
          // 
          this.array[j]=temp
      }
  }

5.希尔排序

  8,5,6,1,7,3,2,4

1.一般的初次取序列的一半为增量,以后每次减半,直到增量为1。所以增量是8/2=4分为四组

 第一轮:(8,7)(5,3)(6,2)(1,4)对分组进行插入排序所以是7,3,2,1,8,5,6,4 第二轮增量是4/2=2两组

......

知道增量等于1,最后执行插入排序

 // 希尔排序
  ArrayList.prototype.shellSort=function(){
      var length=this.array.length
      // 2初始化增量
      var gap =Math.floor(length/2)
      // while 循环(gap不断减少)
       while(gap>=1){
           // 4.以gap作为间隔,进行分组,对分组进行插入排序
           for(var i=gap;i<length;i++){
               var temp=this.array[i]
               var j=i
               while(this.array[j-gap]>temp&&j>gap-1){
                   this.array[j]=this.array[j-gap]
                   j-=gap
               }
               // 5.将j位置的元素赋值temp

               this.array[j]=temp

           }
           gap=Math.floor(gap/2)
       }
  }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值