Java教程

快速排序算法

本文主要是介绍快速排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原理

通过选定一个基准(通常是最后一个数),把数组排成两部分,一部分全小于基准一部分全大于基准(通常采用两个指针从两头扫描,两头都扫到应在另一边的数就交换),然后对两部分分别采用同样的算法,如此递归即可排完

代码实现

int partition(int* arr, int left, int right)
{
    int midPar = arr[right];
    int lPtr = left;
    int rPtr = right - 1;

    while (lPtr <= rPtr)
    {
        while (lPtr <= rPtr && arr[lPtr] < midPar)  //注意避免数组越界
        {
            lPtr++;
        }

        while (lPtr <= rPtr && arr[rPtr] >= midPar)
        {
            rPtr--;
        }

        if (lPtr < rPtr)
        {
            swap(&arr[lPtr], &arr[rPtr]);
        }

        //print(arr, 10);

    }

    swap(&arr[lPtr], &arr[right]);

    return lPtr;
}

void sort(int* arr, int left, int right)
{
    if (left >= right)
    {
        return;
    }
    int mid = partition(arr, left, right);
    sort(arr, left, mid - 1);
    sort(arr, mid + 1, right);
}

评价

n*logn级别的时间复杂度 快但不稳定

这篇关于快速排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!