JS实现选择和快速排序

299 阅读1分钟

1. 选择排序

时间复杂度 O(n²),使用时数据规模越小越好

1.1 算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

1.2 代码实现

function selectionSort(arr) {    var len = arr.length;    var minIndex, temp;    for (var i = 0; i < len - 1; i++) {        minIndex = i;        for (var j = i + 1; j < len; j++) {            if (arr[j] < arr[minIndex]) {     // 寻找最小的数                minIndex = j;                 // 将最小数的索引保存            }        }        temp = arr[i];        arr[i] = arr[minIndex];        arr[minIndex] = temp;    }    return arr;}

2. 快速排序

快速排序的最坏运行情况是 O(n²),但它的平摊期望时间是 O(nlogn)。

2.1 算法步骤

从数列中挑出一个元素,称为 "基准";
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作;
递归地把小于基准值元素的子数列和大于基准值元素的子数列排序;

2.2 代码实现

function quickSort(arr){
    if(arr.length<= 1){return arr}
    let pivotIndex = Math.floor(arr.length/2)
    let pivot = arr.splice(pivotIndex,1)[0]
    let right =[]
    let left = []
    for ( let i = 0 ;i <arr.length ; i ++){
        if(arr[i]<pivot){
            left.push(arr[i])
        }else{
            right.push(arr[i])
         }
    }
      return quickSort(left).concat([pivot],quickSort(right))
}