首页 > 技术文章 > web前端学习历程--排序

dx-chen 2017-05-24 17:42 原文

一、js排序方法

1、按字母顺序排列:

arr.sort()

2、按数值从小到大:

function sortNumber(a,b)//排序函数
{
return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber)) //1,5,10,25,40,1000

3、数组分组

var $arr=[1,1,1,1,2,33,44,12,3,4,4,4,4,4,6,6,6,6,6,6,6,6,6,7,7,7,7,7,123,34,12,2,2,133,33];
     //先进行排序 $arr=$arr.sort(function(a,b){ return a-b; }) var hash={}; var arr=[]; var n=-1; for(var i=0;i<$arr.length;i++){ if(!hash[$arr[i]]){ n++; hash[$arr[i]]=true; arr[n]=[]; }; arr[n].push($arr[i]); } console.log(arr);

封装一下:
Array.prototype.sortGroup=function(){
            var arr=[],hash={},result=[],n=-1,len=this.length;
            arr=this.sort(function(a,b){
                return a-b;
            })
            for(var i=0;i<len;i++){
                if(!hash[arr[i]]){
                    n++;
                    hash[arr[i]]=true;
                    result[n]=[];
                };
                result[n].push(arr[i]);
            }
            return result;
}
var a=[1,2,3,3,3,3,3,3,11,23,23,23,11];
console.log(a.sortGroup())  //
   结果:[[1],[2],[3,3,3,3,3,3],[11,11],[23,23,23]]

 

二、排序算法

1、冒泡排序:

解析:1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。

   2.第一轮的时候最后一个元素应该是最大的一个。

   3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。

2、快速排序:

解析:快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。

3、插入排序:

解析:

 (1) 从第一个元素开始,该元素可以认为已经被排序

 (2) 取出下一个元素,在已经排序的元素序列中从后向前扫描

 (3) 如果该元素(已排序)大于新元素,将该元素移到下一位置

 (4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

 (5)将新元素插入到下一位置中

 (6) 重复步骤2

4、二分法

解析:二分查找,也为折半查找。首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。再在两边中寻找中间值,持续以上操作,直到找到所在位置为止。

(1)递归方法

 传入的4是数组中任一数

(2)非递归方法

5、选择排序:

解析:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

    以此类推,直到所有元素均排序完毕。

6、希尔排序:

解析:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序

 


 

 


 

推荐阅读