zoukankan      html  css  js  c++  java
  • 关于数组排序

    1.数组排序sort方法:

    1      var arrNum = [1,9,14,0,-2];
    2      console.log(arrNum.sort(function(n1, n2){return n1-n2;})); //升序
    3      console.log(arrNum.sort(function(n1, n2){return n2-n1;})); //降序

    2.快速排序:

     1     function quickSort(arr){ // 从大到小
     2         if(arr.length <= 1){ //这个必须要,不然报堆栈溢出的错误
     3             return arr;
     4         } 
     5         var left = [],
     6                 right = [],
     7                 middle = [];
     8         var middleValue = arr[Math.floor(arr.length / 2)];
     9         for(var i=0; i<arr.length; i++){
    10             if(arr[i] > middleValue){
    11                 left.push(arr[i]);
    12             }else if(arr[i] < middleValue){
    13                 right.push(arr[i]);
    14             }else{
    15                 middle = arr[i];
    16             }
    17         }
    18         return [].concat(quickSort(left),middle,quickSort(right));
    19     }
    20     var arr1 = [1, -100, 2000, 0, 1];
    21     console.log(quickSort(arr1)); // [2000, 1, 0, -100]

    这里插播一条广告,我们来看一下下面的代码。如果 list 很大,下面的这段递归代码会造成堆栈溢出。

    1     var list = ['1','2','3','1'];
    2     var nextListItem = function(){
    3         var item = list.pop();
    4         console.log('item'+item);
    5         if(item){
    6             nextListItem();
    7         }
    8     };
    9     nextListItem();

    那么,如何在不改变递归模式的前提下修缮这段代码呢?

    修缮后代码如下:

     1     var list = ['1','2','3','1'];
     2     var nextListItem = function(){
     3         if(list.length > 0){ // 解决堆栈溢出的bug
     4             var item = list.pop();
     5             console.log('item'+item);
     6         }
     7         if(item){
     8             nextListItem();
     9         }
    10     };
    11     nextListItem();

    函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。而递归调用,只有走到最后的结束点后函数才能依次退出,而未到达最后的结束点之前,占用的栈空间一直没有释放,如果递归调用次数过多,就可能导致占用的栈资源超过线程的最大值,从而导致栈溢出,导致程序的异常退出。

    所以这里造成递归堆栈溢出的主要原因是没有指定结束递归的条件!!!

    3.冒泡排序:

     1     function bubbleSort(arr){ // 从小到大
     2         var temp;
     3         for(var i=0; i<arr.length; i++){
     4             for(var j=0; j<arr.length; j++){
     5                 if(arr[j] > arr[j+1]){
     6                     temp = arr[j+1];
     7                     arr[j+1] = arr[j];
     8                     arr[j] = temp;
     9                 }
    10             }
    11         }
    12         return arr;
    13     }
    14     var arr1 = [1, -100, 2000, 0, 1];
    15     console.log(bubbleSort(arr1)); // [-100, 0, 1, 1, 2000]
  • 相关阅读:
    HDU 3565 Bi-peak Number(数位DP)题解
    FJNU Fang G and his Friends(状压DP)题解
    newcoder 小A的柱状图(单调栈)题解
    CodeForces 518E Arthur and Questions(贪心 + 思维)题解
    装饰器来激活生成器
    迭代器(Iterator)和生成器(generator)浅析
    简单的获取网页样式元素(装饰器实现)
    多层装饰器的调用及执行顺序
    三角形的输出
    简单的用户登录(文件处理)
  • 原文地址:https://www.cnblogs.com/xiayu25/p/6269680.html
Copyright © 2011-2022 走看看