zoukankan      html  css  js  c++  java
  • js 排序:sort()方法、冒泡排序、二分法排序。

    js中的排序,这里介绍三种,sort()方法、冒泡排序、二分法排序。

    1、sort方法

    写法:  数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的字符编码大小排序。

    写法2: 数组.sort(function(a,b){ return a-b }); 表示从大到小,(如果写 retrun b-a 则由大到小排序);

    不详细解释了。

    2、冒泡排序。

    原理是,直接将原理可能不好懂,我们还是按照下面的方法去讲吧,这样容易懂些。

    //冒泡排序
    function
    quickSort(arr){ for(var i=0; i<arr.length-1; i++){ console.log(i); for(var j=0; j<arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ var oldVal = arr[j]; arr[j] = arr[j+1]; arr[j+1] = oldVal; } } } }

    我们假设要排序的数组是arr = [10, 8, 7, 6];

    原理:

    这里arr长为3,外层循环三次,当外层for循环第一次循环的时候,即i=0的时候,进入里层循环,这时候将arr循环3次(4-0-1 = 3),即将arr的第一个数挨个于后面三个数比较,如果它大于后面的某个数,就与其交换位置,这次循环结束后,arr变成了[8, 7, 6, 10];

    然后开始外层的i=1的循环,进入内层循环的时候,将arr 循环2次(4-1-1 =2),即,将arr第一数与后面的两个数比较并交换位置,这次循环结束后,arr变成了[7, 6, 8 10];

    然后开始完成的i=2的循环,进入内层循环的时候,将arr 循环1次(4-2-1 =1),即,将arr第一数与后面的两个数比较并交换位置,这次循环结束后,arr变成了[6, 7, 8 10];

    这样就排好序了,其实原理很简单,就是利用内层循环将arr的第一个往后比较,大则后移,一次循环以后,最大的就再最后面了,这时我们只需要把前面3个再次进行比较,最大的放到倒数第二位,然后再把最前面2个进行比较,这样只需要再套一层循环让内层for循环的可以每次循环减少1个比较长度直到最前面两个最小的也比较完成即可。

    3、二分法排序

    方法如下,返回一个由小到大排序后的数组。(原理在代码注释中)

    //二分法排序
    function
    quickSort(arr){ if(arr.length<=1){ return arr; } var nowNober = arr.splice( Math.floor(arr.length/2), 1 ); //取得数组中间的值 var leftArr = []; var reightArr = []; for(var i=0; i<arr.length; i++){ if(parseInt(arr[i])<=nowNober){ leftArr.push(arr[i]); //把比中间值小的放一个数组 }else{ reightArr.push(arr[i]); //把比中间值大的放另一个数组 } } return quickSort(leftArr).concat(nowNober,quickSort(reightArr)) //在对小数组 、 大数组 继续回调上面的分组方法,最后当数组长度只有一的时候,不再往下执行,把返回的单个数组层层拼装新数组,即最后返回的排序好的数组 }


     完!

  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/chengduxiaoc/p/5031545.html
Copyright © 2011-2022 走看看