程序媛小琦(数组排序方法)

数组排序方法

第一种

var arr = [1,36,52,23,48,96,5];
function arrSort(a,b){
    return a - b;
}
console.log(arr.sort(arrSort));

第二种: 冒泡排序

//思想:让数组当中相邻的两个数进行比较,数组当中比较小的数值向下沉,数值比较大的向上浮!
//      外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较。
function bubbleSort(arr){
    for(var i = 0;i < arr.length-1;i++){
        for(var j = 0;j < arr.length-1-i;j++){
            if(arr[j] > arr[j+1]){
                swap(arr,j,j+1)
            }
        }
    }
    return arr;
}
function swap(arr,i,j){
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
console.log(bubbleSort(arr));

第三种: 选择排序

//思想:以起始元素为基准,再从剩余的未排序的元素中挨个与起始元素进行比较,找到剩余未排序元素中
//     最小的一个与之交换位置。重复此步骤。
function selectSort(arr){
    for(var i = 0;i < arr.length-1;i++){
        for(var j = i+1;j < arr.length;j++){
            if(arr[i] > arr[j]){
                awap(arr,i,j)
            }
        }
    }
    return arr;
}
function swap(arr,i,j){
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
console.log(selectSort(arr))

第四种: 选择排序2

function quickSort(arr){
    for(var i = 0;i < arr.length-1;i++){
        var num = arr[i];
        var index = i;
        for(var j = i+1;j < arr.length;j++){
            if(num > arr[j]){
                num = arr[j];
                index = j;
            }
         }
         if(index != i){
             swap(arr,i,index);
         }
      }
      return arr;
  }
  function swap(arr,i,j){
      var temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
  }
  var arr = [23,56,4,89,556,114,1];
  console.log(quickSort(arr));                      

第五种: 快速排序

//1、从数组中取出一个数作为基准。在原数组中进行移动,将大于基准的数放到基准的右边,小于基准的数放到
//    基准左边,在基准左右形成两个子数组。在左右子数组中反复执行步骤1、2。直到所有子数组只剩下一个数。
function quickSort(arr,i,j){
    if(i < j){
        let left = i;
        let right = j;
        let pivot = arr[left];
        while(i < j){
            while(arr[j] >= pivot && i < j){
                j--;
            }
            if(i < j){
                arr[i++] = arr[j];
            }
            while(arr[i] <= pivot && i < j){
                i++;
            }
            if(i < j){
                arr[j--] = arr[i]
            }
        }
        arr[i] = pivot;
        quickSort(arr,left,i-1);
        quickSort(arr,i+1,right);
        return arr;
    }
}
let arr = [23,56,4,89,556,114,1];
console.log(quickSort(arr,0,arr.length-1));

//快速排序(for循环)
function quickSort(arr){
    //如果数组的长度小于等于1,则直接返回这个数组
    if(arr.length <= 1){
        return arr;
    }
    //选择基准数(四舍五入)
    var pivotIndex = Math.floor(arr.length/2);
    //将基准数与原数组分离
    var pivot = arr.splice(pivotIndex,1)[0];
    var left = [];
    var right = [];
    for(var i = 0;i < arr.length;i++){
        if(arr[i] <= pivot){
            left.push(arr[i]);
        }else{
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat(pivot,quickSort(right));
}
let arr = [23,56,4,89,556,114,1];
console.log(quickSort(arr));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值