JS 冒泡排序+选择排序+快速排序

109 阅读1分钟

冒泡排序

//冒泡排序 升序
var arr=[45,23,11,20,5,3,45,9,2,12,11]
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]){ //想要改为降序的话,将>改为<即可
            var t=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=t;
        }
    }
}
console.log(arr);//(11) [2, 3, 5, 9, 11, 11, 12, 20, 23, 45, 45]

选择排序

//选择排序 升序
var arr=[45,23,11,20,5,3,45,9,2,12,11]
for(var i=0;i<arr.length-1;i++){
    var min=i;
    for(var j=i+1;j<arr.length;j++){
        if(arr[min]>arr[j]){ //想要改为降序的话,将>改为<即可
            min=j
        }
    }
    if(min!=i){
        var t=arr[min];
        arr[min]=arr[i];
        arr[i]=t;
    }
}
console.log(arr);//(11) [2, 3, 5, 9, 11, 11, 12, 20, 23, 45, 45]

快速排序

  1. 定义一个方法,输入一个数组
  2. 如果数组长度小于2,就返回输入的数组(数组里只有一个数了,不用比较了)
  3. 如果数组长度大于等于2,找出中间下标,用数组的length/2,遇到不能被整除的,向下取整
  4. 通过中间下标,得到中间数,并且要从原来的数组中拿出来
  5. 准备两个空数组,左边和右边的空数组
  6. 大于中间数放置到右边数组,小于中间数放置到左边数组
  7. 递归继续拆分,拆到数组中只有一个元素了,就不拆了返回结果
    进行合并 左边数组+中间值+右边数组
//快速排序 升序
var arr=[45,23,11,20,5,3,45,9,2,12,11];
//1.定义一个方法,输入一个数组
function quickSort(arr){
    //2.如果数组长度小于2,就返回输入的数组(数组里只有一个数了,不用比较了)
    if(arr.length<2){
        return arr;
    }
    //3.如果数组长度大于等于2,找出中间下标,用数组的length/2,遇到不能被整除的,向下取整
    var middleIndex=parseInt(arr.length/2);
    //4.通过中间下标,得到中间数,并且要从原来的数组中拿出来
    var middleValue=arr.splice(middleIndex,1);
    //5.准备两个空数组,左边和右边的空数组
    var leftArr=[],rightArr=[];
    //6.大于中间数放置到右边数组,小于中间数放置到左边数组
    for(var i=0;i<arr.length;i++){
        if(arr[i]>middleValue){ //想要改为降序的话,将>改为<即可
            rightArr.push(arr[i]);
        }else{
            leftArr.push(arr[i]);
        }
    }
    //7.递归继续拆分,拆到数组中只有一个元素了,就不拆了返回结果
    //    进行合并  左边数组+中间值+右边数组
    return quickSort(leftArr).concat(middleValue,quickSort(rightArr));
}
console.log(quickSort(arr));//(11) [2, 3, 5, 9, 11, 11, 12, 20, 23, 45, 45]