关于数组排序

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]

 

posted @ 2017-01-10 16:00  芒果酱-Jessie  阅读(254)  评论(0编辑  收藏  举报