1. 程式人生 > >前端演算法之快速排序(JS版)

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

快排

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的位置發生了變化,所以是不穩定的。