数组排序方法
数组排序方法大全
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]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix