本文实例总结了JS数组排序技巧。分享给大家供大家参考,具体如下:
1、冒泡排序
~~~
var temp = 0;
for (var i = 0; i < array.length; i++)
{
for (var j = 0; j < array.length - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
console.log(array);
~~~
2、sort排序
~~~
var arrSimple=new Array(1,8,7,6,2,5);
arrSimple.sort();
// document.writeln(arrSimple.join());
console.log(arrSimple.join())
~~~
3、 快速排序
~~~
function quickSort(arr){
if(arr.length<=1){//如果数组只有一个数,就直接返回;
return arr;
}
var num=Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
var newValue=arr.splice(num,1);//找到中间数的值
var left=[],right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<newValue){
left.push(arr[i]);//基准点的左边的数传到左边数组
}else{
right.push(arr[i]);//基准点的右边的数传到右边数组
}
}
return quickSort(left).concat(newValue,quickSort(right));//递归不断重复比较
}
console.log(quickSort([31,4,5,52,1,8]));
~~~
4、希尔排序
~~~
function shellSort(nums){//希尔排序
var gaps=[5,3,1];//定义间隔区间
for(var g=0;g<gaps.length;g++){//一个一个间隔值开始
for(var i=gaps[g];i<nums.length;i++){//以间隔值遍历
var temp=nums[i];//选中元素
for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
nums[j]=nums[j-gaps[g]];//后移
}
nums[j]=temp;//填补
}
}
}
function show(nums){//显示数组
for(var i=0;i<nums.length;i++){
document.write(nums[i]+' ');
}
document.write('<br>');
}
var nums=[6,0,2,9,3,5,8,0,5,4];
show(nums);//6 0 2 9 3 5 8 0 5 4
shellSort(nums);//希尔排序
show(nums);//0 0 2 3 4 5 5 6 8 9
~~~
5、插入排序
~~~
function sort(elements){
//假设第0个元素是一个有序的数列,第1个以后的是无序的序列,
//所以从第1个元素开始将无序数列的元素插入到有序数列中
for(var i = 1; i < elements.length; i++){
//升序
if(elements[i] < elements[i-1]){
//取出无序数列中的第i个作为被插入元素
var guard = elements[i];
//记住有序数列的最后一个位置,并且将有序数列位置扩大一个
var j = i - 1;
elements[i] = elements[j];
//比大小,找到被插入元素所在的位置
while(j >= 0 && guard < elements[j]){
elements[j+1] = elements[j];
j--;
}
//插入
elements[j+1] = guard;
}
}
}
var elements = [10, 9, 8, 7, 6, 5];
console.log('before: ' + elements);
sort(elements);
console.log(' after: ' + elements);
~~~
6、选择排序:
~~~
function order(arry){
var ary=arry
function sorrt() {
length = ary.length;
for (var i = 0; i < length; i++) {
_min = ary[i]
k = i
for (var j = i + 1; j < length; j++) {
if (_min > ary[j]) {
_min = ary[j]
k = j
}
}
ary[k] = ary[i]
ary[i] = _min
}
return ary;
}
return {sor:sorrt};
}
var k=order([14,12,6,5,18,0,1,3,2])
console.log(k.sor())
~~~
附:js中数组(Array)的排序(sort)注意事项
~~~
var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组
alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序
alert(arrDemo);//10,50,51,100
arrDemo.sort(function(a,b){return a<b?1:-1});//从大到小排序
alert(arrDemo);//100,51,50,10
~~~
- 前端框架
- 进阶攻略:前端最全的框架总结
- 进阶攻略:前端完整的学习路线
- 进阶攻略:最全的前端开源JS框架和库
- 常用的六个富文本编辑器
- 移动端手势的七个事件库
- Bootstrap相关优质项目学习清单
- 三个Bootstrap免费字体和图标库
- jQuery实现多种切换效果的图片切换的五款插件
- 移动端常用的四个框架
- 七个帮助你处理Web页面层布局的jQuery插件
- 前端工具
- 八款前端开发人员更轻松的实用在线工具
- 推荐几款好用的云笔记软件
- 几款在线的脑图制作工具
- 细数那些年我用过的前端开发工具
- 九款优秀的企业项目协作工具推荐
- 细数那些带打赏功能的平台
- 干货|几个有用的问答平台
- 前端资源
- web开发快速提高工作效率的一些资源
- 前端工程师们,这些干货让你开发效率加倍
- 那些我不得不收藏的技术网站
- 前端学习的几个网站
- 老司机程序员用到的各种网站整理
- 前端几个常用简单的开发手册拿走不谢
- 2017年度最流行的十大中国开源软件
- 程序员常用的六大技术博客类
- 提高工作效率的几个小技巧
- Bootstrap相关优质项目必备网址
- 前端技术栈
- h5调用底层接口的一些知识
- JS数组去重的6种算法实现
- Git安装及密钥的生成并上传本地文件到GitHub上
- JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
- 就如何快速免费提高网站排名小结
- 浅谈移动端页面无刷新跳转问题的解决方案
- 移动端iPhone系列适配问题的一些坑
- HTML5在客户端存储数据的新方法——localStorage
- 移动开发之css3实现背景几种渐变效果
- 前端杂谈
- 程序员如何利用空余时间挣零花钱?
- 一个前端妹子的悲欢编程之路
- 【程序员交友】祈澈姑娘:假装文艺与代码齐飞的前端妹子
- 初中级前端开发工程师如何提升个人能力?
- 如何打造个人技术影响力
- 程序媛,坚持这几个好习惯让你越来越美
- 工作中如何快速成长和学习?
- 我是如何快速积累工作经验
- 谷歌AI中国中心成立,人工智能势不可挡?
- 前端面试
- 一份来自前端开发工程师的规范简历
- 2017前端精品面试文章总结
- 面试经历:为即将找工作的你保驾护航
- 我的北漂之路 北漂如饮水,冷暖自知
- 如何在面试中脱颖而出?
- 2017年10大主流编程语言最新排行榜出炉
- 前端面试之前要准备的那些事