数组排序常见的7种方法

这篇博客详细介绍了7种常见的数组排序算法:桶排序、冒泡排序、选择排序、快速排序、插入排序、希尔排序以及JavaScript内置的sort排序。通过示例代码展示了每种排序算法的工作原理和实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组排序

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

//简单, 但是不用,浪费内存
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);
}

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

for(var i =0,len= arr.length;i<len;i++){
// arr[i] // 前面的数据
for(var j = i+1;j<arr.length;j++){
// arr[j] // 是一个待比较的数据
if(arr[i]<arr[j]){
var tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
}
}
console.log(arr)

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;
}
}
}

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].concat([3],[4,5]); //[1, 2, 3, 4, 5]

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–;
}
}

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]);

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]

//对象数组排序
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’))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值