重温前端基础之-js排序算法

javascript数组常用的方法

push():返回值,数组新的长度

pop():返回值,被删除的数组末尾元素

shift():返回值,被删除的数组首部元素

unshift():返回值,数组新的长度

concat():返回值,拼接后新的数组

slice():返回值,截取的新的数组

splice():返回值,被插入/删除/替换元素的数组

map():返回新的数组

filter():返回被筛选后的新的数组

reduce():返回新的数组

sort():返回排序后的新的数组

与数组有关的两个:

join():将数组转化为用特殊符号分割的字符串

reverse():将数组顺序逆转

不常用的:

every()

some()

 

  1 //1、使用sort方法进行排序的算法如下:
  2 
  3 //字符串排序:
  4 
  5 var arr = [George,John,Thomas,James,Adrew,Martin];
  6 
  7 arr.sort();
  8 
  9 //数字排序:
 10 
 11 var arr = [4,3,7,10,15,30,22];
 12 
 13 arr.sort(function(a,b){
 14   return a-b>0;
 15 })
 16 
 17 //2、冒泡排序:
 18 
 19 function bubbbleSort(arr){
 20 
 21   if(!Array.isArray(arr)){
 22 
 23     return new Error("arr不是数组");
 24 
 25   }
 26 
 27   if(arr.length<=1){
 28 
 29     return arr;
 30 
 31   }
 32 
 33   var temp,i,j;
 34 
 35   for(i=0;i<arr.length;i++){
 36 
 37     for(j=0;j<arr.length-i-1;j++){
 38 
 39       if(arr[j]>arr[j+1]){
 40 
 41         temp = arr[j];
 42 
 43         arr[j] = arr[j+1];
 44         arr[j+1]=temp;
 45 
 46       }
 47 
 48     }
 49 
 50 
 51   }
 52   return arr;
 53 
 54 }
 55 
 56 //改进版冒泡排序:(添加一个标志位,可以让已经排过序的不用重复遍历)
 57 
 58 function bubbbleSort(arr){
 59 
 60   if(!Array.isArray(arr)){
 61 
 62     return new Error("arr不是数组");
 63 
 64   }
 65 
 66   if(arr.length<=1){
 67 
 68     return arr;
 69 
 70   }
 71 
 72   var pos,temp,j;
 73   var i = arr.length-1;//初始时,最后位置保持不变
 74 
 75   while(i>0){
 76     pos = 0;//每一轮循环,位置从0开始。
 77     for(j=0;j<i;j++){
 78       if(arr[j]>arr[j+1]){
 79         pos = j;
 80         temp = arr[j];
 82          arr[j] = arr[j+1];
 83         arr[j+1]=temp;
 84 
 85       }
 86 
 87     }
 88 
 89     i=pos;
 90   }
 91   return arr;
 92 
 93 }
 94 
 95  
 96 
 97 //3、快速排序(原理是,1、找一个基值,一般是数组的中间数,2、然后将大于中间值的数放右边,小于中间值的数放左边,3、然后递归第二步,4返回拼接好排序后的数组)
 98 
 99 function quickSort(arr){
100   if(!Array.isArray(arr)){
101     return new Error("arr不是数组");
102   }
103 
104   if(arr.length<=1){
105     return arr;
106   }
107   var i,left = [],right = [];
108   var midIndex = Math.floor(arr.length/2);
109   var midItem = arr.splice(midIndex,1)[0];//此处要把中间值从数组中去掉。
110   for(i=0;i<arr.length;i++){
111     if(arr[i]<midItem){
112       left.push(arr[i]);
113     }else{
114       right.push(arr[i]);
115     }
116   }
117   return quickSort(left).concat([midItem],quickSort(right));
118 }

 

 

 参考文章:http://web.jobbole.com/87968/

posted @ 2018-03-05 13:52  happyYawen  阅读(260)  评论(0编辑  收藏  举报