排序算法——快速排序

原理

採用分治的思想。主要分爲三步:

第一步選擇一個基數。

第二步將排序數組在分區的過程,將比該基數小的放在左邊,比該基數大的放在右邊。

第三步,對左右分區執行同樣的操作直到剩下一個數字。

分析

在最壞的情況下,也就是數據的劃分不平衡,一部分是n-1個數字,另一部分沒有數據,並且每次劃分都是這種情況,則其時間複雜度就是On2);在一般情況(包括最好),其時間複雜度爲Onlog2n);由於以下實現過程在原數組的基礎上對數組進行排序,故其空間複雜度是O(1)。

C語言實現

void qsort(int *arr, int start, int end)
{
    int high = end, low = start;
    int value = arr[start];
 
    if(NULL != arr || start < end){
        while(low < high){
            while(low < high && arr[high] > value){
                 high--;
            }
            if(low < high){
                arr[low] = arr[high];
                low++;
            }
            while(low < high && arr[low] < value){
                low++;
            }
            if(low < high){
                arr[high] = arr[low];
                high--;
            }
        }
        arr[low] = value;
        qsort(arr, start, low - 1);
        qsort(arr, low + 1, end);
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章