• [原创]快速排序(C++版)


      快速排序时间复杂度:ON*log2 N)空间复杂度:O1不稳定。

      这个算法我试过针对单链表进行实现,但发现由于单链表从表尾反向遍历不方便,因此该算法不适合针对单链表进行实现,

    下面我实现经典的场景:针对数组来实现该算法。  

    //划分阶段:选择一个基准数,通常选择开头的一个数,
    //然后以该基准数为基准进行划分:小于该基准数的放在该数左边,大于的放在该数右边。
    //最后返回该基准数最终存放位置下标;
    int partition_(int A[], int low, int high){
        int p = A[low];
        while (low<high)
        {
            while (low<high&&A[high] > p) high--;
            while (low<high&&A[low] < p) low++;
            if (low < high){
                swap(A[low], A[high]); 
                if (A[low] == p&&A[high] == p)
                    low++;
            }
        }
        A[low] = p;
        return low;
    }
    
    //递归调用进行快速排序
    void quickSort(int A[], int low, int high){
        if (low < high){
            int pivotpos = partition_(A, low, high);
            quickSort(A,low,pivotpos -1);
            quickSort(A,pivotpos+1,high);
        }
    }

    这里我只是用C++来实现了该算法,后面有机会我会写一篇java版的实现博文。

  • 相关阅读:
    第十一章关联容器
    第十章泛型算法
    第九章
    第八章
    阅读记录
    java.lang.Class阅读笔记
    java.time包阅读笔记
    CLion运行多个main函数
    c++中lower_bound和upper_bound中的comp参数
    如何写dfs
  • 原文地址:https://www.cnblogs.com/lordcheng/p/7326801.html
Copyright © 2020-2023  润新知