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. 王者荣耀交流协会第6次Scrum立会

    Scrum master :刘耀泽 任思佳的导入excel原型博客地址:http://www.cnblogs.com/rensijia/p/7766812.html 王玉玲psp表格记录功能博客地址: ...

  2. 作业2-MathExam V2.0

    MathExam V2.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 50 • ...

  3. 《Linux内核与分析》第八周

    by 20135130王川东 一.进程切换关键代码switch-to分析     1.进程调度与进程调度时机分析 1)不同类型的进程有不同的调度要求 分类:I/0-bound:频繁的进行I/o 通常会 ...

  4. 03慕课网《vue.js2.5入门》——Vue-cli的安装,创建webpack模板项目

    安装Vue-cli 第一种 貌似不可以,然后用了第二种,但是重装系统后,第二种不能用了,用了第一种可以 # 全局安装vue -cli命令npm install --global vue-cli # 创 ...

  5. Java接口interface,匿名内部类

    接口 1.接口内部为 常量+公用的抽象方法.类必须实现接口中的所有方法 2.接口的语法格式:不写abstract会自动添加,可以继承多个接口 修饰符不能使private,protected [修饰符] ...

  6. Chrome浏览器超强调试工具

    原文:http://lizanhong2011.blog.163.com/blog/static/18028516720117301312729/ 在Google Chrome浏览器出来之前,我一直使 ...

  7. QMetaEnum利用Qt元数据实现枚举(enum)类型值及字符串转换

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QMetaEnum利用Qt元数据实现枚举(enum)类型值及字符串转换     本文地址:ht ...

  8. 【Leetcode】445. Add Two Numbers II

    You are given two non-empty linked lists representing two non-negative integers. The most significan ...

  9. 利用C#进行文件读写的方法选择总结

    小的文本文件(100M以下)直接用File类的ReadAllText()和WriteAllText()方法 这两个方法内部其实就是封装了StreamReader类的ReadToEnd()和Stream ...

  10. excel表中判断A列与B列内容是否相同,相同的话在C列按条件输出!

    判断两列数据是否相同,有以下几个函数判断(做笔记于此,方便以后查找): 1.=IF(AND(A4=B4),"相同","") 在C列输出相同字符 2.=IF(A1 ...