前端算法之快速排序(JS版)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/channyfish/article/details/77270871

快排

1.基本原理:快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

2.算法实现:

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

function quickSort(arr,left,right){
    var i=left;
    var j=right;
    var temp;
    while(i<j) {
        for (; i < j && arr[j] >= arr[left]; j--);
        for (; i < j && arr[i] <= arr[left]; i++);
        if (i < j) {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    temp=arr[left];
    arr[left]=arr[i];
    arr[i]=temp;
    if(i>left){
        quickSort(arr,left,i-1);
    }if(right>i){
        quickSort(arr,i+1,right);
    }
}
arr=[3,5,2,6,1,7,9,4,8];
quickSort(arr,0,8);
alert(arr);

3.时间复杂度

最好情况:O(nlogn);
最坏情况:O(n^2); //有序序列时;
平均情况:O(nlogn);

4.空间复杂度

O(logn);

5.不稳定性

一个数组 2,1,1 第一轮交换时 2和第二个1交换,两个1的位置发生了变化,所以是不稳定的。

猜你喜欢

转载自blog.csdn.net/channyfish/article/details/77270871