js排序在日常中用的比较少,一般都是后台直接从数据库获取数据的的时候就排好了,不过也可以了解一下基础的排序。
1、冒泡排序,简单说就是让每个数与其他数依次比对,一般是从第一个数开始的,特点是简单容易理解,缺点是适合数量较少的排序,性能一般。
var times=0; arr=[5,2,4,1,7,3,8,6,9,0]; var bubbleSort=function(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i]>arr[j]){//如果前面的数据比后面的大就交换 var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } console.log("第"+(++times)+"次排序后:"+arr); } } return arr; }; console.log("The result is:"+bubbleSort(arr));
2、插入法排序,就是先假设第一个已近排好了序,然后依次往后对每个值与之前的进行对比找到合适的位置插入。循环次数少,适合少量的排序。
arry=[5,2,4,1,7,3,8,6,9,0]; var times=0; var insertSort=function(arr){ for(var i =1,j;i<arr.length;i++){ j=i; v=arr[j]; while(arr[j-1]>v){ arr[j] = arr[j-1]; j--; if(j == 0){ break; } console.log(1) } arr[j]=v; console.log("第"+(++times)+"次排序"+arr) } return arr; } console.log(insertSort(arry));
3、快速排序,主要就是循环取其中间设置的基准值进行比较,这个性能比较高,循环的次数少,但比第一个理解上稍微有些难度。
arr=[5,2,4,1,7,3,8,6,9,0]; var times=0; var quickSort=function(arr){ //如果数组长度小于等于1无需判断直接返回即可 if(arr.length<=1){ return arr; } console.log("现在的数组"+arr) var midIndex=Math.floor(arr.length/2);//取基准点 var midIndexVal=arr.splice(midIndex,1);//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数arr[index+1] console.log("取基准点的值"+midIndexVal) console.log("基中"+midIndex) var left=[];//存放比基准点小的数组 var right=[];//存放比基准点大的数组 //遍历数组,进行判断分配 for(var i=0;i<arr.length;i++){ if(arr[i]<midIndexVal){ left.push(arr[i]);//比基准点小的放在左边数组 } else{ right.push(arr[i]);//比基准点大的放在右边数组 } console.log("第"+(++times)+"次排序后:"+arr); } //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1; return quickSort(left).concat(midIndexVal,quickSort(right)); }; console.log(quickSort(arr));
4、js封装的sort(),不过这是根据字符编码的顺序进行排序,所以要对数组进行排序要传入相应的参数(必须是函数)
var arry1=[1,5,6,4,8,4,5,5,40,4,50,7,4,55,6,5,444,5,4,4,2,4,5,7,8,8]; function sortNumber(a,b) { return a - b; console.log(a-b) } console.log(JSON.stringify(arry1.sort(sortNumber)))//[1,2,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,7,8,8,8,40,50,55,444]
a-b如果大于1则认为a在b后,小于1则认为a在b前面,等于的话就是返回0了,这个就是定义的排序规则,如果从大到小b-a就可以了。据了解 sort() 数量小于等于22的数组使用插入排序,大于22的数组使用快速排序(没有验证)