1. JavaScript的sort()方法

var array = [1,4,-8,-3,6,12,9,8];
function compare(val1,val2){
return val1-val2;
};
array.sort(compare);
document.write(array);

sort()方法按照升序排列数组项,会调用每个数组项的toString()转型方法,然后比较得到的字符串。

toString()方法是把布尔值或BooleanObject转换为字符串,并返回结果。

compare()函数方法是一个比较函数,作为sort()方法的参数。

2. 冒泡排序(从后向前)

var array = [1,4,-8,-3,6,12,9,8];
function sort(arr){
for(var j=0;j<arr.length-1;j++){
//两两比较,如果前一个比后一个大,则交换位置。
for(var i=0;i<arr.length-1-j;i++){
if(arr[i]>arr[i+1]){
var temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
sort(array);
document.write(array);
  • (1)比较相邻的元素。如果第一个比第二个大,就交换他们两个位置。
  • (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • (3)针对所有的元素重复以上的步骤,除了最后一个。
  • (4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

3. 快速排序:递归思想,两边快速的排序,冒泡排序的改进

var array = [1,4,-8,-3,6,12,9,8];
function quickSort(arr){
//如果数组长度小于等于1,则返回数组本身
if(arr.length<=1){
return arr;
}
//定义中间值的索引
var index = Math.floor(arr.length/2);
//取到中间值
var temp = arr.splice(index,1);
//定义左右部分数组
var left = [];
var right = [];
for(var i=0;i<arr.length;i++){
//如果元素比中间值小,那么放在左边,否则放右边
if(arr[i]<temp){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(temp,quickSort(right));
}
document.write(quickSort(array));

Math.floor(x)方法是向下取整,返回小于或等于x的最接近的整数。

splice(index,num,item)方法是向数组中添加项目,或是从数组中删除项目,并返回被删除的项目。

  • index是整数,被操作项目所在的位置(必须)
  • num是整数,要删除的项目的数量,如果为0,表示不删除(必须)
  • item是向数组中添加的新项目,可以是多个(可选)

push()方法是向数组末尾添加一个或多个新项目并返回新数组的长度

concat()方法连接两个或多个数组,不会改变原有数组,返回一个新数组

4. 插入排序

var array = [1,4,-8,-3,6,12,9,8];
function insertSort(arr){
//假设第0元素是有序序列,第1元素之后是无序的序列。从第1元素开始依次将无序序列的元素插入到有序序列中
for(var i=1; i<arr.length;i++){
if(arr[i]<arr[i-1]){
//取出无序序列中需要插入的第i个元素
var temp = arr[i];
//定义有序中的最后一个位置
var j = i-1;
arr[i] = arr[j];
//比较大小,找到插入的位置
while(j>=0&&temp<arr[j]){
arr[j+1] = arr[j];
j--;
};
//插入
arr[j+1] = temp;
}
}
}
insertSort(array)
document.write(array);
  • (1)从第一个元素开始,该元素可以认为已经被排序
  • (2)取出下一个元素,在已经排序的元素序列中扫描
  • (3)如果该元素(已排序)大于新元素,将该元素移到下一位置
  • (4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • (5)将新元素插入到下一位置中
  • (6)重复步骤2

5. 选择排序

var array = [1,4,-8,-3,6,12,9,8];
function selectSort(arr){
for(var i=0;i<arr.length;i++){
//设置当前范围最小值和索引
var min = arr[i];
var minIndex = i;
//在该范围选出最小值
for(var j=i+1;j<arr.length;j++){
if(min>arr[j]){
min = arr[j];
minIndex = j;
}
}
//将最小值插入,并将原来位置的最小值删除
arr.splice(i,0,min);
arr.splice(minIndex+1,1);
}
}
selectSort(array);
document.write(array);
  • (1)在未排序序列中找到最小(大)元素
  • (2)并存放到排序序列的起始位置
  • (3)然后,再从剩余未排序元素中继续寻找最小(大)元素
  • (4)然后放到已排序序列的末尾。
  • (5)以此类推

有道云笔记参考:http://note.youdao.com/noteshare?id=37724eca003ffef34f76a68c0482cc68&sub=ABA17FAA52D6463D97A51B8365BC0E70

js实现数组排序的更多相关文章

  1. js之数组排序

    数组,大家都不陌生,只要是学编程的人都知道这个入门的数据结构,在js中也是有数组这个概念的,跟普通的数组一样只是定义的形式不同罢了.下面是一个数组的排序代码: <html> <hea ...

  2. JS实现数组排序的方法

    前言 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,当然排序也是算法中的一种,javascript内置的sort函数是多种排序算法的集合,数组在原数组上进 ...

  3. JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)

    数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. 语法: arrayObject.sort(方法函数) 参数说明: 1.如果不指定<方法函数>,则按unicode码 ...

  4. JS中数组排序

    法一:升序原理:循环嵌套即双向遍历,在从前往后的遍历过程中,如果前一个位子大于后一个位子,把前一个位子的值付给后一个位子, 在从后往前遍历过程中如果前一个值大于后一个的值,把前面的值付给后面,过程中把 ...

  5. js对数组排序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. js打乱数组排序

    用到的知识点:Math.random()//用于打乱数组索引 random() 方法可返回介于 0(包含) ~ 1(不包含) 之间的一个随机数. var arr=[1,2,3,4,5,6]; for( ...

  7. JS实现数组排序:升序和降序

    如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序.即 a 和 b 是两个将要被比较的元素: 如果 compareFunction(a, b) 小于 0 ,那么 a 会 ...

  8. JS 中数组的排序和去重

    在 PHP 中,数组有很多排序方法,不过其他语言的数组中大概是不会像 JS 的数组一样,包罗万象,啥都通吃的.所以 JS 的数组排序情况就略多一些了. 简单粗暴的排序: 赤果果的sort: var   ...

  9. 常用的js代码片段

    1.单选框/手风琴 <script> $(document).ready(function(){ $("dd").on("click",functi ...

随机推荐

  1. 第三周pspo过程文档

    团队协作:     日期/任务      听课        编写程序         阅读相关书籍 日总计          周一      110          60             ...

  2. FPGA论文

    基于 NetFPGA 的 VCP 网络的设计与实现 --可变结构拥塞控制协议(VCP),适应于高带宽时延乘积网络的显式拥塞控制协议 无源光网络(PON) 1.区块链技术发展,物联网设备激增,服务器压力 ...

  3. 事后诸葛亮--Alpha版本总结

    目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结: 本小组和其他组的评分 分工和贡献分 全组讨论的照片 问题 第一组提问回答:爸爸饿了队 第二组提问回答:拖 ...

  4. Scala快速入门-函数组合

    compose&andThen 两个函数组装为一个函数,compose和andThen相反 def f(test: String):String = { "f(" + te ...

  5. Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:

    1. testing ! ... 1 1 原文参考链接: http://showerlee.blog.51cto.com/2047005/1266712 很久没有更新LAMP的相关文档了,刚好最近单位 ...

  6. [OS] 系统调用

  7. Delphi 组件渐进开发浅谈(一)——由简入繁

    最近业余时间在写游戏修改器玩,对于Delphi自带的组件总觉得差强人意,需要书写大量冗余代码,如果大量使用第三方组件,在以后的移植和与他人交互时也不是很方便,因此便产生了自己封装组件的想法. 实际上这 ...

  8. 【.Net+数据库】sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from (  select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId ...

  9. BZOJ 2131 圈地计划(最小割+黑白染色)

    类似于happiness的一道题,容易想到最小割的做法. 但是不同的是那一道题是相邻的如果相同则有收益,这题是相邻的不同才有收益. 转化到建图上面时,会发现,两个相邻的点连的边容量会是负数.. 有一种 ...

  10. BZOJ4923 K小值查询(splay)

    容易想到建一棵平衡树,修改时打上标记即可.但是修改会导致平衡树结构被破坏.注意到实际上只有[k+1,2k)这一部分数在平衡树中的位置会被改变,所以对这一部分暴力修改,因为每次都会使其至少减小一半,复杂 ...