js 数组排序

目录

前言

一、数组排序方式

1、使用 sort() 和 reverse() 方法对数组排序

2、选择排序

3、冒泡排序

二、排序题

1、将根据排序函数比较数组中每个元素的大小排序

(1)、从小到大排序

(2)、从大到小排序

2、根据奇偶性质排列数组

3、不区分大小写排序字符串

4、把浮点数和整数分开显示

5、按照数组的每一项的 id 值对数组进行从小到大的排序


前言

排序都是根据 ASCII 码排的,关于 ASCII 请戳这里:键盘码(ASCII码 和 Unicode字符编码表)_青蛙king的博客-CSDN博客

一、数组排序方式

1、使用 sort() 和 reverse() 方法对数组排序

var a = [1,"c",3,"d",6,0];
a.sort();
console.log(a);                                  // [0, 1, 3, 6, "c", "d"]

 如果想按照从大到小的顺序排序,可以在用 sort() 方法之后,接着用一下 reverse() 方法:

var a = [1,"c",3,"d",6,0];
a.sort().reverse();
console.log(a);                                  // ["d", "c", 6, 3, 1, 0]

2、选择排序

每一轮比较时,会用数组中的一个基准值和后面的数依次做比较,如果基准值大于后面某个数,就交换每一轮比较后得到最小值。

function fn(arr){
    for(var i=0; i<arr.length-1; i++){
        for(var j=i+1; j<arr.length; j++){
            if(arr[i] > arr[j]){
                var t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
    }
    return arr;
}

var arr = [1,3,6,4,2,5];
console.log(fn(arr));                    // [1, 2, 3, 4, 5, 6]

 计算过程:

arr = [1,3,2,6,5,4]        length=arr.length = 6

i(i<length-1)j(j=i+1 && j<length)比较结果描述
i<50j<611<3[1,3,2,6,5,4]

j循环体,第一次循环结束,确定最小值 1。

继续序列化。

21<2[1,3,2,6,5,4]
31<6[1,3,2,6,5,4]
41<5[1,3,2,6,5,4]
51<4[1,3,2,6,5,4]
1j<623>2[1,2,3,6,5,4]

j循环体,第二次循环结束,确定第二小的值 2。

继续序列化。

32<6[1,2,3,6,5,4]
42<5[1,2,3,6,5,4]
52<4[1,2,3,6,5,4]
2j<633<6[1,2,3,6,5,4]

j循环体,第二次循环结束,确定第三小的值 3。

继续序列化。

43<5[1,2,3,6,5,4]
53<4[1,2,3,6,5,4]
3j<646>5[1,2,3,5,6,4]

j循环体,第二次循环结束,确定第四小的值 4。

继续序列化。

55>4[1,2,3,4,6,5]
4j<656>5[1,2,3,4,5,6]

j循环体,第二次循环结束,确定第五小的值 5。

序列化完成。

两个循环体都结束。

3、冒泡排序

每相邻两个元素大小作比较,不合适,则交换。

function fn(arr){
    for(var i=0; i<arr.length-1; i++){
        for(var j=0; j<arr.length-i-1; j++){
            if(arr[j] > arr[j+1]){
                var t = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = t;
            }
        }
    }
    return arr;
}
var arr = [1,3,2,6,5,4];
console.log(fn(arr));                              // [1, 2, 3, 4, 5, 6]

计算过程:

arr = [1,3,2,6,5,4]        length=arr.length = 6

i(i<length-1)j(j<length-i-1)比较结果描述
i<50j<501<3[1,3,2,6,5,4]

j循环体,第一次循环结束后
锁定了最大值 6。

继续序列化。

13>2[1,2,3,6,5,4]
23<6[1,2,3,6,5,4]
36>5[1,2,3,5,6,4]
46>4[1,2,3,5,4,6]
1j<401<2[1,2,3,5,4,6]

j循环体,第二次循环结束后锁定了第二大的值 5。

序列化完成。

循环还在继续。

12<3[1,2,3,5,4,6]
23<5[1,2,3,5,4,6]
35>4[1,2,3,4,5,6]

.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

直至循环结束。

二、排序题

1、将根据排序函数比较数组中每个元素的大小排序

(1)、从小到大排序

function f(a,b) {
    return (a - b);
}
var a = [3,1,2,4,5,7,6,8,0,9];
a.sort(f);
console.log(a);                             // [0,1,2,3,4,5,6,4,7,8,9]

(2)、从大到小排序

function f(a,b) {
    return (b - a);
}
var a = [3,1,2,4,5,7,6,8,0,9];
a.sort(f);
console.log(a);                             // [9,8,7,6,5,4,3,2,1,0]

2、根据奇偶性质排列数组

function f(a, b) {
    var a = a % 2,
        b = b % 2;
    if (a == 0) return 1;  //如果参数a为偶数,则排在左边
    if (b == 0) return -1;  //如果参数b为偶数,则排在右边
}
var a = [3,1,2,4,5,7,6,8,0,9];
a.sort(f);  //根据数字大小由大到小进行排序
console.log(a);                                   // [3,1,5,7,9,0,8,6,4,2]

3、不区分大小写排序字符串

在正常情况下,对字符串进行排序是区分大小写的,这是因为每个大写字母和小写字母在字符编码表中的顺序是不同的,大写字母大于小写字母。

var a = ["aB", "Ab", "Ba", "bA"];
a.sort();
console.log(a);  // ["Ab", "Ba", "aB", "bA"]

大写字母总是排在左侧,如果让小写字母总是排在左侧,可以设计:

function f(a,b) {
    return (a < b);
}
var a = ["aB", "Ab", "Ba", "bA"];
a.sort();
console.log(a);                              // ["Ab", "Ba", "aB", "bA"]

如果不区分大小写,大写字母和小写字母按相同顺序排列,可以设计:

function f(a, b) {
    var a = a.toLowerCase;
    var b = b.toLowerCase; 
    if (a < b) {
        return 1;
    }
    else {
        return -1;
    }
}
var a = ["aB", "Ab", "Ba", "bA"];
a.sort();
console.log(a);                           // ["aB", "Ab", "Ba", "bA"]

4、把浮点数和整数分开显示

function f(a, b) {
    if (a > Math.floor(a)) return 1;  //如果a是浮点数,则调换位置
    if (b > Math.floor(b)) return -1;  //如果b是浮点数,则调换位置
}
var a = [3.5555, 1.23456, 3, 2.11111, 5, 7, 3];
a.sort(f);
console.log(a);                                 // [3,5,7,3,2.11111,1.23456,3.55555]

5、按照数组的每一项的 id 值对数组进行从小到大的排序

let arr = [
  {id: 1, str: 'aa'},
  {id: 4, str: 'dd'},
  {id: 2, str: 'bb'},
  {id: 3, str: 'cc'}
]
arr.sort((a, b) => {
  return (a.id + '') > (b.id + '') ? 1 : -1
})
/* 
[
  {id: 1, str: 'aa'},
  {id: 2, str: 'bb'},
  {id: 3, str: 'cc'}
  {id: 4, str: 'dd'},
]
*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值