js常用的几种数组排序算法 (例子实现从小到大)

475 阅读2分钟

选择排序

定义:

1.找到数组中最小的,放在第一位.

2.找到剩余未排序的数组中最小的,将最小的跟剩余数组第一位交换。

3.重复第二步,直到剩余数组只有一项。

实现:

let array=[3,4,6,7,89,1];
let min,temp;
for(let i=0;i<array.length-1;i++){
    min=i;
    for(let j=i+1;j<array.length;j++){
        if(array[j]<array[min]){
            min=j;
        }
    }
    temp=array[min];
    array[min]=array[i];
    array[i]=temp
}

冒泡排序

定义:

1.从头开始,两两比较,把大的放后面,直到最大的跑到数组最后一位。

2.数组比较元素不考虑最大的,重复步骤1,直到只剩下一个元素,默认放在第一位.

实现:

let array=[3,4,6,7,89,1];
let temp;
for(let i=0;i<array.length-1;i++){
    for(let j=0;j<array.length-i-1;j++){
        if(array[j]>array[j+1]){
            temp=array[j]
            array[j]=array[j+1]
            array[j+1]=temp
        }
    }
}

插入排序

定义:

从第二项开始,拿出【该项】数据,空出位置,往前比较,找到比【该项】大的,大值向后移动一位,一直向前比较,直到没有比【该项】大的,此时大值向后移动留出的【位置】,将【该项】放到此【位置】。直到原数组最后一项也找到自己的位置。(很容易想到的是,每次拿出的该项,其前面的值都是排好序的)。

实现:

let array=[3,4,6,7,89,1];
let key;
for(let i=1;i<array.length;i++){
    key=array[i];
    j=i-1;
    while(j>=0&&array[j]>key){
        array[j+1]=array[j];
        j--;
    }
    array[j+1]=key
}
​

希尔排序 (显然shell是个人)

定义:

将数组分成n/2(向下取整,为了是确保最后一项也参与进来)组,让每组中数组位置相差一致。然后针对该组进行插入排序。直到每项相差只有一,采用一次插入排序即可完成整体排序

实现:

let array=[3,4,6,7,89,1];
for(let interval=Math.floor(array.length/2);interval>0;interval=Math.floor(interval/2)){
    for(let i=interval;i<array.length;i++){
        let j=i;
    let key=array[i]
        while(j>0&&array[j-interval]>key){
        array[j]=array[j-interval]
        j-=interval
    }
        array[j]=key;
    }
}
console.log(array)

快速排序

定义:

1.找到一个基准值,将数组中小于基准值的【数组a】放到基准值左边,大于基准值的【数组b】放到基准值右边,

2.对【数组a】及【数组b】执行同样的操作,生成数组c\d\e\f;

3.对生成的数组执行1,直到生成的数组只有一项,排序结束。

let array=[3,4,6,7,89,1];
function partByPivot(array){
    if(array.length<=1){
        return array;
    }
    else{
        let arrayA=[],arrayB=[];
        let pivot=array[0];
        for(let i=1;i<array.length;i++){
            if(array[i]>=pivot){arrayB.push(array[i])}
            else{arrayA.push(array[i])};
        }
        return [...partByPivot(arrayA),pivot,...partByPivot(arrayB)]
    }
}