sort排序到底怎么排序
2024-08-31 12:59:25
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>
最新文章
- sql 计算周围公里语句
- 如何自定义Flask中的响应类
- Androd开发之广告栏设计
- Cocopod上更新上传自己的开源框架供别人下载
- ForkJoin框架
- ububtu 14.04 问题集合
- nodejs学习记录
- COM与.NET程序集导出和部署COM组件
- requireJS的配置心得
- codeforces 887A Div. 64 思维 模拟
- IE11 开启F12开发人员工具中的 始终从服务器刷新
- 在虚拟机上的ubuntu 1.6 系统中sudo apt-get失败的问题
- 深度学习中Dropout原理解析
- c# 二维list排序和计时
- 如何:为iOS 的方法写注释 让xcode 能够索引得到?
- mount: unknown filesystem type &#39;LVM2_member&#39;解决方案【转】
- ubuntu16.04 安装指定版本Node,升级npm到指定版本
- 多线程PV
- 20145313张雪纯 《Java程序设计》第4周学习总结
- django源码分析---- Model类型&;Field类型
热门文章
- 【Django】创建后的基本操作
- Pyhton学习——Day59
- css预编译器——Less的使用
- myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
- WinServer-服务器管理器-从入门到放弃
- java用freemarker实现导出excel
- Remove Duplicates from Sorted List II 解答(有个比較特殊的case leetcode OJ没有覆盖)
- Android ImageView 不显示JPEG图片 及 Android Studio中怎样引用图片资源
- (OpenGL ES 2.0 Shading Language) attribute 、uniform 和 varying
- vc应用CPictureEx类(重载CStatic类)加载gif动画