• js中排序的几种方法


    js中排序的几种方法

     刚面试一家公司,被问到了各种排序方法 ,现在终结下各类排序方法,如下:

    1.sort()方法

    复制代码
    var ar1=[2,4,6,8,1,3]
    var ar2=[2,16,36,8,56]
    ar1.sort()
    ar2.sort()//这个方法值只能排序第一位数  也可以字符串进行排序
    console.log(ar1)//[1,2,3,4,6,8]
    console.log(ar2)//[16, 2, 36, 56, 8]
    
    ar2.sort(function(a,b){
        return a-b //a-b为升序
        //return b-a  //b-a为降序
    })
    console.log(ar2)//[2, 8, 16, 36, 56]
    复制代码

    2.reverse()方法

    var ar1=[2,4,6,8,1,3]
    ar1.reverse()//此方法为倒序,也就是反过来。并不会进行大小排序
    console.log(ar1)//[3, 1, 8, 6, 4, 2]

    3.冒泡排序

    复制代码
    //每轮依次比较相邻两个数的大小,后面比前面小则交换
    var b=0//设置用来调换位置的值
    var a=[1,9,33,2,5,34,23,98,14]//冒泡排序
    for(var i=0;i<a.length;i++){
        for(var j=0;j<a.length;j++){
            if(a[j]>a[j+1]){
                b=a[j]
                a[j]=a[j+1]
                a[j+1]=b
            }
        }
    }
    console.log(a)//[1, 2, 5, 9, 14, 23, 33, 34, 98]
    复制代码

    4.选择排序

    复制代码
    //拿第一个数与后面数相比较,如果比后面的数大则交换
    //拿第二个数与后面的数比较,如果比后面的数大则交换
    //直到比较到倒数第二个数,最后一个数不用比较
    var b=0//设置用来调换位置的值
    var a=[1,9,33,2,5,34,23,98,14]//冒泡排序
    for(var i=0;i<a.length;i++){
        for(var j=i;j<a.length;j++){
            if(a[j]>a[j+1]){
                b=a[j]
                a[j]=a[j+1]
                a[j+1]=b
            }
        }
    }
    console.log(a)//[1, 2, 5, 9, 14, 23, 33, 34, 98]
    复制代码

    5.快速排序

    先从数列中取出一个数作为基准数

    分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

    再对左右区间重复第二步,直到各区间只有一个数

    复制代码
    function quickSort(arr, i, j) {
      if(i < j) {
        let left = i;
        let right = j;
        let mid = Math.floor((left+right)/2);
        let temp = arr[left];
        arr[left] = arr[mid];
        arr[mid] = temp;
        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;
      }
    }
    
    
    复制代码

    6.二分查找排序
      首先说一下二分法排序的原理,算法思想简单描述:
    在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们 
    中间的那个元素比,如果小,则对前半再进行折半,否则对后半 
    进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间 
    的所有元素后移,再把第i个元素放在目标位置上。

    二分法排序最重要的一个步骤就是查找要插入元素的位置,也就是要在哪一个位置上放我们要准备排序的这个元素。
    当我们查找到位置以后就很好说了,和插入排序一样,将这个位置以后的所有元素都向后移动一位。这样就实现了二分法排序。
      然后是怎么查找着一个位置呢,就是不断的比较已排序的序列中的中间元素和要排序元素,如果大于的话,说明这个要排序的元素在已排序序列中点之前的序列。

    var erfen = function (val, arr) {
            if (arr.length < 1||val<arr[0]||val>arr[arr.length-1]) { 
              return false; 
            }//如果这个数字没在其中直接返回false
            else if (val == arr[0]||val==arr[arr.length-1]) {
                return true;
            }//如果找到了就返回true
            else if (arr.length == 1) {
                return false;
            }//如果不能再缩小了而且没查到返回false
            var res = [];
            var base = Math.floor(arr.length / 2);
            if (val > arr[base]) {
               res = arr.splice(base + 1, arr.length - 1);
            }//如果大于中间的从右边开始找
           else if (val = arr[base]) {
                return true;
            }//恰巧等于中间的就返回true
            else {
               res = arr.splic(0, base - 1);
            }//如果小于中间的就从右边找
            return erfen(val,res);//递归
        };
  • 相关阅读:
    自己编译linux内核
    codeblocks中文输入及控制台乱码
    c快速学习代码
    二分法求方程解
    苹果公司前任首席执行官乔布斯语录
    html5特性
    lamp server快速搭建
    poj 1247 Magnificent Meatballs 解题报告
    Ural 1005 Stone Pilet 解题报告
    Ural 1020 Rope 解题报告
  • 原文地址:https://www.cnblogs.com/chenhuichao/p/13528620.html
Copyright © 2020-2023  润新知