zoukankan      html  css  js  c++  java
  • 快速排序(递归和分治)

    算法思想

    先通过一个函数,标记第一个元素为基准元素,

    然后分为左边都是大于基准元素的

    右边都是小于基准元素的

    然后使用排序函数分别对左半段和右半段进行排序

    时间复杂度

    最坏情况:$O(n^2)$

    最好情况:$O(nlog_2n)$

    平均情况:$O(nlog_2n)$

    动态演示图

    图片来源:https://blog.csdn.net/qq_40595682/article/details/102146917

    在这里插入图片描述

    C/C++代码实现

    #include <cstdio>
    #include <cstdlib>
    
    void quictSort(int[], int, int);
    int partition(int[], int, int);
    
    int main()
    {
        int num[100];
        int n;
        while (~scanf("%d", &n) && n >= 0)
        {
            for (int i = 0; i < n; i++)
                scanf("%d", &num[i]);
    
            quictSort(num, 0, n - 1);
    
            for (int i = 0; i < n; i++)
                printf("%d ", num[i]);
            printf("
    ");
        }
        return 0;
    }
    
    // 快速排序
    void quictSort(int num[], int left, int right)
    {
        if (left < right)
        {
            int p = partition(num, left, right);    // 分两段 
            quictSort(num, left, p - 1);            // 左半段排序
            quictSort(num, p + 1, right);           // 右半段排序
        }
    }
    // 从大到小排序
    int partition(int num[], int left, int right)
    {
        int key = num[left];    // 第一个元素为基准元素
        while (left < right)
        {
            while (left < right && num[right] <= key)     // 从右往左找到比基准元素大的
                right--;
            if (left < right)
                num[left] = num[right];                     // 把大的交换到左边
    
            while (left < right && num[left] >= key)      // 从左往右找到比基准元素小的
                left++;
            if (left < right)
                num[right] = num[left];                     // 把小的交换到右边
        }
        num[left] = key;                                    // 把基准元素赋值回去
        return left;
    }
    
  • 相关阅读:
    可视化svg深入理解viewport、viewbox、preserveaspectradio
    async generator promise异步方案实际运用
    JavaScript中面相对象OOP
    css3:神秘的弹性盒子flexbox
    JavaScript:我总结的数组API
    CSS3:过渡大全
    CSS3奇特的渐变示例
    缓存:前端页面缓存、服务器缓存(依赖SQL)MVC3
    nohup
    video和audio
  • 原文地址:https://www.cnblogs.com/yanhua-tj/p/13996572.html
Copyright © 2011-2022 走看看