gpt4 book ai didi

JavaScript数组排序的六种常见算法总结

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章JavaScript数组排序的六种常见算法总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

着急用的话,选择前两个就行了,后面的看看就好.

开发中,遇到数组排序的需求很频繁,这篇文章会介绍几个常见排序思路.

1、希尔排序(性能最好) 。

如果要从大到小排列,则 while(arr[n] > arr[n - interval] && n > 0) .

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 希尔排序算法
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;
}
 
// Array
var arr = [10, 20, 40, 60, 60, 0, 30]
 
// 打印排序后的数组
console.log(xier(arr)) //[0, 10, 20, 30, 40, 60, 60]

2、sort排序(普通数组 / 数组嵌套对象) 。

一堆数组排序 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Array
var arr = [10, 20, 40, 60, 60, 0, 30]
 
// 排序方法
arr.sort( function (a,b){
 
  /*
  * return b-a; —> 降序排序
  * return a-b; —> 升序排列
  */
  return a-b;
}) //括号里不写回调函数则默认按照字母逐位升序排列
 
// 打印排序后的数组
console.log(arr) //[0, 10, 20, 30, 40, 60, 60]

对象数组排序(数组套对象) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//对象数组排序
var arr = [
  {name: 'syy' , age:0},
  {name: 'wxy' , age:18},
  {name: 'slj' , age:8},
  {name: 'wj' , age:20}
];
 
// 排序方法
function compare(property) { //property:根据什么属性排序
  return function (a,b){
   var value1 = a[property];
   var value2 = b[property];
   /*
   * value2 - value1; ——> 降序
   * value1 - value2; ——> 升序
   */
   return value1 - value2; //升序排序
  }
}
 
// 打印排序后的数组
console.log(arr.sort(compare( 'age' )))
/*
0: {name: "syy", age: 0}
1: {name: "slj", age: 8}
2: {name: "wxy", age: 18}
3: {name: "wj", age: 20}
*/

3、桶排序 。

特点:简单,但非常浪费内存,几乎不用.

桶中出现的数组元素都做个标记 1,然后将桶数组中有 1 标记的元素依次打印.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Array
var arr = []
 
// 每个数组项做标记(1)
for (let i = 0; i < arr.length; i++) {
  let key = arr[i]
  arr[key] = 1
}
 
// 遍历打印出每项
for (let j in arr) {
  debugger
  console.log(j)
}

4、冒泡排序 。

性能:一般(需要每项进行比较).

每一趟找出最大的值.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Array
var arr = [10, 20, 40, 60, 60, 0, 30]
 
/*
* 总共比较次数为arr.length-1次
* 每次的比较次数为arr.length-1次
* 依次递减
*/
var temp; //交换变量标识
 
// 两层for分别表示当前项与第二项
for (let i = 0; i < arr.length - 1; i++) {
  for (let 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;
   }
  }
}
 
// 打印排序后的数组
console.log(arr) //[0, 10, 20, 30, 40, 60, 60]

5、选择排序 。

性能:一般(需要每项进行比较).

假定某个位置的值是最小值,与冒泡排序类似.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Array
var arr = [10, 20, 40, 60, 60, 0, 30]
 
 
var temp; //交换变量标识
 
// 两层for分别表示当前项与第二项
for (let i = 0; i < arr.length - 1; i++) {
  for (let j = i + 1; j < arr.length; j++) {
 
   // 假设第二项是最小值(是则交换/否则继续比较)
   if (arr[i] > arr[j]) {
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
   }
  }
}
 
// 打印排序后的数组
console.log(arr) //[0, 10, 20, 30, 40, 60, 60]

6、插入排序 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Array
var arr = [10, 20, 40, 60, 60, 0, 30]
 
// 排序算法
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--;
  }
}
 
// 打印排序后的数组
console.log(arr) //[0, 10, 20, 30, 40, 60, 60]

总结 。

到此这篇关于JavaScript数组排序的六种常见算法总结的文章就介绍到这了,更多相关JavaScript数组排序常见算法内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/weixin_44198965/article/details/107996497 。

最后此篇关于JavaScript数组排序的六种常见算法总结的文章就讲到这里了,如果你想了解更多关于JavaScript数组排序的六种常见算法总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com