JS数组10种排序二

希尔排序

九:希尔排序
    //增量为5,排序,增量为2排序
    //增量为1,相邻的数组两两比较
function shellSort(arr) {
      for (var gap = 5; gap > 0; gap = Math.floor(gap / 2)) {
        for (var i = 0; i < arr.length; i++) {
          for (var j = i + gap; j < arr.length; j += gap) {
            // if(i+gap<arr.length){
            if (arr[i] > arr[j]) {
              //alert("gap:"+gap+";arr[i]:"+arr[i]+";arr[i+gap]:"+arr[i+gap])
              swap(arr, i, j);
            }
          }
        }
      }
    }
    shellSort(arr)

桶排序

//八:桶排序
    //根据步长space,分到num个桶里(桶是二维数组,num个桶每个桶里有N个数字)
    //给数组每个数放入不同桶里。(脑子不够,写得比较水)
    function bucketSort(arr) {
      //space=20 
      var buckets = [], space = 20, num, index;
      var max = arr[0];
      var min = arr[0];
      for (var i = 0; i < arr.length; i++) {
        max = max > arr[i] ? max : arr[i];
        min = min < arr[i] ? min : arr[i];
      }
      num = Math.floor((max - min)/space) + 1;
      
      for (var i = 0; i < num; i++) {
        for (var j = 0; j < arr.length; j++) {
          index = Math.floor((arr[j] - min) / space);
          if (buckets[index] == null) {
            buckets[index] = [];
          }
          if(i==index){
            buckets[i].push(arr[j]);
          }
        }
      }
      for(var i=0;i<buckets.length;i++){
        if(buckets[i]!=null){
          for(var j=0;j<buckets[i].length;j++){
            var temp;
            for(var k=j;k<buckets[i].length;k++){
              if(buckets[i][j]>buckets[i][k]){
                temp=buckets[i][k];
                buckets[i][k]=buckets[i][j];
                buckets[i][j]=temp;
              }
            }
          }
        }
      }
      alert(buckets)
    }
    bucketSort(arr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值