排序算法——快速排序

原理

采用分治的思想。主要分为三步:

第一步选择一个基数。

第二步将排序数组在分区的过程,将比该基数小的放在左边,比该基数大的放在右边。

第三步,对左右分区执行同样的操作直到剩下一个数字。

分析

在最坏的情况下,也就是数据的划分不平衡,一部分是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);
    }
}

点赞