基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序时间复杂度分析

快速排序最优的情况就是每一次取到的元素都刚好平分整个数组

最差情况下时间复杂度

  1. **最差的情况就是每一次取到的元素就是数组中最小/最大的,这种情况其实就是冒泡排序了(每一次都排好一个元素的顺序)**<br />** 这种情况时间复杂度就好计算了,就是冒泡排序的时间复杂度:T[n] = n * (n-1) = n^2 + n;**<br />** 综上所述:快速排序最差的情况下时间复杂度为:O( n^2 )**<br />

平均时间复杂度

   ** 快速排序的平均时间复杂度也是:O(nlogn)**
function swap(A, i, j) {
            [A[i], A[j]] = [A[j], A[i]]
        }
        function partition(A, first, last) {
            var i=first, j=last-1;
            const pivot = A[j]
            while(i !== j){
                if(A[i] <= pivot){
                    i++
                }else{
                    swap(A, i, --j)
                }
            }
            swap(A, j, last-1)
            return j
        }
        function qsort(A, first=0, last=A.length){
            if(last - first <= 1) return;
            const a = partition(A, first, last)
            qsort(A, first, a)
            qsort(A, a+1, last)
        }
        const A = [10, 80, 30, 90, 40, 50, 70]
        qsort(A)
        console.log(A)