Array的sort()方法
参照W3School的说明:
不提供排序函数时,按照字母表(字符编码)顺序排列
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 George,John,Thomas,James,Adrew,Martin 2 Adrew,George,James,John,Martin,Thomas
不提供排序函数时,对于数字数组,sort()函数会先把数字转化为字符串再按字母表顺序排列
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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 的值。
一个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 10,5,40,25,1000,1 2 1,5,10,25,40,1000
个人理解:sort()函数利用的是交换排序或者冒泡排序算法。
------------------------下面是摘自其他人空间的一些排序函数-------------------
摘自:媛我医生-http://hi.baidu.com/duduppp/item/3e4941f8dedd1d5fc9f337bd
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 1,5,3,4,6,2
个人尝试写了一个日期的,其实跟数字的一样的
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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~