快速排序算法分析

// 快速排序算法
#include <stdio.h>
#include <stdlib.h>

void quicksort(int *arr, int nLeft, int nRight)
{
    int i =0, j = 0;
    if (nLeft >= nRight)
    {
        return;
    } 
    
    i = nLeft;
    j = nRight;


    int nMid = (nLeft + nRight) / 2;
    int nMidVal = arr[nMid];


    while (i < j)
    {
       // From left move to right
        while ((arr[i] < nMidVal) && (i < j))
        {
            i++;
        }

       // From right move to left
        while ((arr[j] > nMidVal) && (i < j))
        {
            j--;
        }
            
        if (i < j)
        {
            arr[i] = arr[i]^arr[j];
            arr[j] = arr[i]^arr[j];
            arr[i] = arr[i]^arr[j];
        }
    }

    nMid = j;
    quicksort(arr, nLeft, nMid);
    quicksort(arr, nMid+1, nRight);
}

int main()
{
    int arrTest[]={2,5,7,4,1,3,9,0,8,6};
    int i = 0;
    char c;

    for (i = 0; i < 10; i++)
    {
        printf("%d ", arrTest[i]);
    }
    printf("\n\n");

    quicksort(arrTest, 0, 9);

    for (i = 0; i < 10; i++)
    {
        printf("%d ", arrTest[i]);
    }

    printf("\n\n");

    scanf("%c", c);
    return 0;
}


算法分析:

时间复杂度
最好情况(每次总是选到中间值作枢轴)T(n)=O(nlogn)
最坏情况(每次总是选到最小或最大元素作枢轴)
                  做n-1趟,每趟比较n-i次,总的比较次数最大:[O(n2)] 退化为冒泡排序
                  平均时间复杂度为::T(n)=O(nlogn)














你可能感兴趣的:(快速排序算法分析)