Javascript中Array对象的sort()方法初探

Array的sort()方法

参照W3School的说明:

不提供排序函数时,按照字母表(字符编码)顺序排列

不提供排序函数
 1 <script type="text/javascript">
 2 
 3 var arr = new Array(6)
 4 arr[0] = "George"
 5 arr[1] = "John"
 6 arr[2] = "Thomas"
 7 arr[3] = "James"
 8 arr[4] = "Adrew"
 9 arr[5] = "Martin"
10 
11 document.write(arr + "<br />")
12 document.write(arr.sort())
13 
14 </script>
输出结果
1 George,John,Thomas,James,Adrew,Martin
2 Adrew,George,James,John,Martin,Thomas

不提供排序函数时,对于数字数组,sort()函数会先把数字转化为字符串再按字母表顺序排列

不提供排序函数,数字数组
 1 <script type="text/javascript">
 2 
 3 var arr = new Array(6)
 4 arr[0] = 11;
 5 arr[1] = 5;
 6 arr[2] = 40;
 7 arr[3] = 25;
 8 arr[4] = 1000;
 9 arr[5] = 1;
10 
11 document.write(arr + "<br />");
12 document.write(arr.sort());
13 
14 </script>
输出结果
1 11,5,40,25,1000,1
2 1,1000,11,25,40,5 

------------------------下面部分是提供排序函数的情况-------------------------

下面是对排序函数的一些说明:

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

一个例子:

简单的排序函数
 1 <script type="text/javascript">
 2 
 3 function sortNumber(a,b)
 4 {
 5 return a - b
 6 }
 7 
 8 var arr = new Array(6)
 9 arr[0] = "10"
10 arr[1] = "5"
11 arr[2] = "40"
12 arr[3] = "25"
13 arr[4] = "1000"
14 arr[5] = "1"
15 
16 document.write(arr + "<br />")
17 document.write(arr.sort(sortNumber))
18 
19 </script>
输出结果
1 10,5,40,25,1000,1
2 1,5,10,25,40,1000

个人理解:sort()函数利用的是交换排序或者冒泡排序算法。

------------------------下面是摘自其他人空间的一些排序函数-------------------

摘自:媛我医生-http://hi.baidu.com/duduppp/item/3e4941f8dedd1d5fc9f337bd

顺序、倒序、随机排序
 1 <script type="text/javascript">
 2 function AscSort(x, y) {
 3    return x == y ? 0 : (x > y ? 1 : -1);
 4 }
 5 function DescSort(x, y) {
 6    return x == y ? 0 : (x > y ? -1 : 1);
 7 }
 8 function RandomSort(x, y) {
 9    return Math.floor(Math.random() * 2 - 1 );
10 }
11 var array = [2,4,3,5,1,6,9,0,8];
12 document.write("<p>正序:" + array.sort(AscSort) + "</p>");
13 document.write("<p>倒序:" + array.sort(DescSort) + "</p>");
14 document.write("<p>随机排序:" + array.sort(RandomSort) + "</p>");
15 document.write("<p>随机排序:" + array.sort(RandomSort) + "</p>");
16 document.write("<p>随机排序:" + array.sort(RandomSort) + "</p>");
17 </script>
输出结果
1 正序:0,1,2,3,4,5,6,8,9
2 
3 倒序:9,8,6,5,4,3,2,1,0
4 
5 随机排序:8,6,5,4,3,2,1,0,9
6 
7 随机排序:8,5,4,6,2,3,0,9,1
8 
9 随机排序:5,2,6,3,0,4,9,1,8

摘自:疯子-http://www.cnblogs.com/0banana0/archive/2011/11/02/2233410.html

奇数在前偶数在后
 1 <script type="text/javascript">
 2 function O(x, y) {
 3     if (x % 2 ==0)  
 4         return 1;
 5     if (x % 2 !=0)        
 6         return -1;
 7  }    
 8 var arrA = [6,2,4,3,5,1];
 9 arrA.sort(O);
10 document.writeln(arrA);
11 </script>
输出结果
1 1,5,3,4,6,2 

个人尝试写了一个日期的,其实跟数字的一样的

日期排序
 1 <script type="text/javascript">
 2 function compareDate(x,y){
 3     return x-y;
 4 }
 5 var arrDate=new Array(6);
 6 var tempDate0=new Date(1990,1,1);
 7 var tempDate1=new Date(1992,1,1);
 8 var tempDate2=new Date(1995,1,1);
 9 var tempDate3=new Date(1994,1,1);
10 var tempDate4=new Date(1991,1,1);
11 var tempDate5=new Date(1993,1,1);
12 arrDate[0]=tempDate0;
13 arrDate[1]=tempDate1;
14 arrDate[2]=tempDate2;
15 arrDate[3]=tempDate3;
16 arrDate[4]=tempDate4;
17 arrDate[5]=tempDate5;
18 for(var i in arrDate){
19     document.writeln(new Date(arrDate[i]),"<br />");
20 }
21 document.write("------------------------------","<br />");
22 arrDate.sort(compareDate);
23 for(var i in arrDate){
24     document.writeln(new Date(arrDate[i]),"<br />");
25 }
26 </script>
输出结果
 1 Thu Feb 1 00:00:00 UTC+0800 1990
 2 Sat Feb 1 00:00:00 UTC+0800 1992
 3 Wed Feb 1 00:00:00 UTC+0800 1995
 4 Tue Feb 1 00:00:00 UTC+0800 1994
 5 Fri Feb 1 00:00:00 UTC+0800 1991
 6 Mon Feb 1 00:00:00 UTC+0800 1993
 7 ------------------------------
 8 Thu Feb 1 00:00:00 UTC+0800 1990
 9 Fri Feb 1 00:00:00 UTC+0800 1991
10 Sat Feb 1 00:00:00 UTC+0800 1992
11 Mon Feb 1 00:00:00 UTC+0800 1993
12 Tue Feb 1 00:00:00 UTC+0800 1994
13 Wed Feb 1 00:00:00 UTC+0800 1995

了解得不深,求指教。有什么有趣的排序函数也求分享O(∩_∩)O~

posted @ 2012-11-06 22:16  tk8542  阅读(195)  评论(0编辑  收藏  举报