君陌离的博客

vuePress-theme-reco 君陌离    2018 - 2020
君陌离的博客 君陌离的博客

Choose mode

  • dark
  • auto
  • light
首页
我的作品
  • 项目橱窗
  • blog模板
分类
  • 数据库
  • CSS
  • 摘记
  • JS
  • Node
  • Vue
  • React
  • GIT
  • Promise
  • Liunx
  • Xshell
  • ajax
  • WINDOWS
  • Python
  • 随笔
  • 脚手架
  • node
  • 自动化
标签
笔记
时间线
About Me
  • 关于我
  • 赞赏
Contact
  • GitHub
  • QQ
author-avatar

君陌离

70

文章

90

标签

首页
我的作品
  • 项目橱窗
  • blog模板
分类
  • 数据库
  • CSS
  • 摘记
  • JS
  • Node
  • Vue
  • React
  • GIT
  • Promise
  • Liunx
  • Xshell
  • ajax
  • WINDOWS
  • Python
  • 随笔
  • 脚手架
  • node
  • 自动化
标签
笔记
时间线
About Me
  • 关于我
  • 赞赏
Contact
  • GitHub
  • QQ
  • HTML5

  • JS

    • JS 前20个常用字符串方法及使用方式
    • JS封装
    • for in,for of, for,forEach,map的区别
    • windowfn方法 npm包引用
    • js中数组操作方法
    • 数组排序的方法
    • 常见的前端跨域解决方案
    • Cookie、session和localStorage、以及sessionStorage之间的区别
    • 数组去重的方法
    • windowfn 常用函数封装(持续更新中)
  • 微信小程序

  • 数据库

  • React

  • Vue

  • vuepress

数组排序的方法

vuePress-theme-reco 君陌离    2018 - 2020

数组排序的方法

君陌离 2020-05-12 JSArray

# 1、桶排序(桶中出现的数组元素都做个标记1,然后将桶数组中有1标记的元素依次打印)

//简单, 但是不用,浪费内存
var arr=[1,5,7,9,16,2,4];
var arr2=[];
for(var i=0;i<arr.length;i++){
    var key=arr[i];
    arr2[key]=1;
}
for(var j in arr2){
    console.log(j);
}
1
2
3
4
5
6
7
8
9
10

# 2、冒泡排序(每一趟找出最大的)

//性能一般
var arr=[1,5,7,9,16,2,4];
//冒泡排序,每一趟找出最大的,总共比较次数为arr.length-1次,每次的比较次数为arr.length-1次,依次递减
var temp;
for(var i=0;i<arr.length-1;i++){
    for(var j=0;j<arr.length-1;j++){
        if(arr[j]>arr[j+1]){
            temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 3、选择排序(假定某个位置的值是最小值)

//性能一般
var arr=[1,23,5,8,11,78,45];
var temp;
for(var i=0;i<arr.length-1;i++){
    for(var j=i+1;j<arr.length;j++){
        if(arr[i]>arr[j]){
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 4、快速排序(一拆为二)

function quickSort(arr){
    if(arr.length <= 1){
        return arr;
    }
    var left = [];
    var right = [];
    var midIndex = parseInt(arr.length / 2);
    var mid = arr[midIndex];
    for(var i = 0 ; i < arr.length ; i++){
        if(i == midIndex) continue;
        if( arr[i] < mid){
            left.push(arr[i])
        }else{
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat([mid],quickSort(right));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 5、插入排序

var arr=[45,1,32,21,56,87,43,12,34,45];
  for(var i=0;i<arr.length;i++){
    var n=i;
    while(arr[n]>arr[n+1] && n>=0){
    var temp=arr[n];
    arr[n]=arr[n+1];
    arr[n+1]=temp;
    n--;
  }
}
1
2
3
4
5
6
7
8
9
10

# 6、希尔排序(性能最好的排序)

function xier(arr){
    var interval = parseInt(arr.length / 2);  //分组间隔设置
    while(interval > 0){
        for(var i = 0 ; i < arr.length ; i ++){
            var n = i;
            while(arr[n] < arr[n - interval] && n > 0){
                var temp = arr[n];
                arr[n] = arr[n - interval];
                arr[n - interval] = temp;
                n = n - interval;
            }
        }
        interval = parseInt(interval / 2);
    }
    return arr;
}
xier([12,9,38,44,7,98,35,59,49,88,38]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 7、sort排序

//一维数组排序
var arr=[1,5,7,9,16,2,4];
arr.sort(function(a,b){
    return b-a;  //降序排列,return a-b; —>升序排列
})  //括号里不写回调函数,则默认按照字母逐位升序排列,结果为[1,16,2,4,5,7,9]
1
2
3
4
5
//对象数组排序
var arr = [
    {name:'syy',age:0},
    {name:'wxy',age:18},
    {name:'slj',age:8},
    {name:'wj',age:20}
];
function compare(property){
    return function(a,b){
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;//升序,降序为value2 - value1
    }
}
arr.sort(compare('age'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
欢迎来到 您的站点名称($site.title)
看板娘