sort()方法

sort() 方法在适当的位置对数组的元素进行排序,并返回数组。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var arr=[1,11,2,22,5,4,0];
arr.sort();
alert(arr);//[0,1,11,2,22,4,5]
</script>
</head>
<body>
</body>
</html>

由上图可以看出:数组会按照字符的Unicode进行排序(把数组里面当成字符串处理)。

按升序排列:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var arr=[1,11,2,22,5,4,0];
arr.sort(
function(n1,n2){
return n1-n2;
});
alert(arr);//[0,1,2,4,5,11,22]
</script>
</head>
<body>
</body>
</html>

随机排序:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var arr=[1,11,2,22,5,4,0];
arr.sort(
function(n1,n2){
return Math.random()-0.5;
});
alert(arr);
</script>
</head>
<body>
</body>
</html>

sort()方法如何实现排序

  怎么查看sort()方法是如果实现排序的呢?我们可以在比较函数里把a,b及数组输出一下,看看是否能够看出使用的排序算法。

var arr=[1, 8, 3, 5, -1];
function compare(a,b){
console.log(a,b,arr);
return a-b;
}
arr.sort(compare);
/**
控制台输出
1 8 [1, 8, 3, 5, -1]
8 3 [1, 8, 3, 5, -1]
1 3 [1, 8, 8, 5, -1]
8 5 [1, 3, 8, 5, -1]
3 5 [1, 3, 8, 8, -1]
8 -1 [1, 3, 5, 8, -1]
5 -1 [1, 3, 5, 8, 8]
3 -1 [1, 3, 5, 5, 8]
1 -1 [1, 3, 3, 5, 8]
[-1,1, 3, 5, 8]
*/

  第一次1和8比较,1<8,不需要调整位置。   

  第二次8和3比较,8>3,需要调整位置。但是这里没有交换位置,仅仅是8覆盖了3位置。这里就可以推断出不是单纯的使用了冒泡算法。
  第三是1和3比较,1<3,3替换了8的位置。什么鬼,几个意思???看到这里我也是表示不懂呀。那就继续往下看咯。
  

  第四是8和5比较,8>5,又仅仅是覆盖,没有交换位置。还是不懂,继续往下!
  第五是3和5比较,3<5,5替换了8的位置,不懂,继续往下!
  

  第六是8和-1比较,8>-1, 还仅仅是覆盖,继续往下!
  第七、八、九次,-1依次和5,3,1做了比较,并且5,3,1都移动了一次位置。

  我们得出了结论:sort()方法是使用的冒泡和插入两种方式结合进行排序的。

模拟排序:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var arr=[32,12,4,20,1,54,56,6,14];
function findMinIndex(arr,start){
var iMin=arr[start];
var iMinIndex=start;
for(var i=start;i<arr.length;i++){
if(iMin>arr[i]){
iMin=arr[i];
iMinIndex=i;
}
}
return iMinIndex;
}
for(var i=0;i<arr.length;i++){
var n=findMinIndex(arr,i);
var tem;
tem=arr[n];
arr[n]=arr[i];
arr[i]=tem;
}
alert(arr);
</script>
</head>
<body>
</body>
</html>

最新文章

  1. sql 计算周围公里语句
  2. 如何自定义Flask中的响应类
  3. Androd开发之广告栏设计
  4. Cocopod上更新上传自己的开源框架供别人下载
  5. ForkJoin框架
  6. ububtu 14.04 问题集合
  7. nodejs学习记录
  8. COM与.NET程序集导出和部署COM组件
  9. requireJS的配置心得
  10. codeforces 887A Div. 64 思维 模拟
  11. IE11 开启F12开发人员工具中的 始终从服务器刷新
  12. 在虚拟机上的ubuntu 1.6 系统中sudo apt-get失败的问题
  13. 深度学习中Dropout原理解析
  14. c# 二维list排序和计时
  15. 如何:为iOS 的方法写注释 让xcode 能够索引得到?
  16. mount: unknown filesystem type &#39;LVM2_member&#39;解决方案【转】
  17. ubuntu16.04 安装指定版本Node,升级npm到指定版本
  18. 多线程PV
  19. 20145313张雪纯 《Java程序设计》第4周学习总结
  20. django源码分析---- Model类型&amp;Field类型

热门文章

  1. 【Django】创建后的基本操作
  2. Pyhton学习——Day59
  3. css预编译器——Less的使用
  4. myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
  5. WinServer-服务器管理器-从入门到放弃
  6. java用freemarker实现导出excel
  7. Remove Duplicates from Sorted List II 解答(有个比較特殊的case leetcode OJ没有覆盖)
  8. Android ImageView 不显示JPEG图片 及 Android Studio中怎样引用图片资源
  9. (OpenGL ES 2.0 Shading Language) attribute 、uniform 和 varying
  10. vc应用CPictureEx类(重载CStatic类)加载gif动画