数组排序方法

数组排序方法大全

a.希尔排序(性能最好)

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

   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]
 
  b.sort排序(普通数组|数组对象)
// 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]
----------------------and------------------------
// 对象数组排序
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}
*/
 
c.冒泡排序
性能:一般(需要每项进行比较)每一趟找出最大的值
// 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]
 
d.插入排序
// 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]
posted @   北北1992  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示