• 南大算法设计与分析课程复习笔记(4)L4


    一、快速排序

     算法导论上关于快速排序有两种写法

    第一种,从头到尾遍历,不断将小于基准元素的项移到前面。代码很简介,只需要维护一个交换位置,表示小于基准元素的末尾位置加一

    我们看算法导论上的一个例子:

    代码实现(代码中用p记录上面i+1的位置,pos2应该为数组长度减1):

    void quicksort(vector<int>& v, int pos1,int pos2) {
        if (pos1 >= pos2) return;
        int p = pos1;
        for (int i = pos1; i < pos2; ++i) {
            if (v[i] < v[pos2]) {
                swap(v[p], v[i]);
                ++p;
            }
        }
        swap(v[p],v[pos2]);
        quicksort(v,pos1,p-1);
        quicksort(v,p+1,pos2);
    }

    第二种,维护两个位置,第一个位置向后寻找,直到找到大于pivot的元素,第二个位置向前寻找,直到找到小于pivot的元素,然后互换。

    代码实现:

    void quicksort2(vector<int>& v, int pos1, int pos2) {
        if (pos1 >= pos2) return;
        int p1 = pos1;
        int p2 = pos2;
        int p = v[pos1];
        while (true) {
            while (p1<pos2 && v[p1]<=p) {
                ++p1;
            }
            while (p2>pos1 && v[p2]>=p) {
                --p2;
            }
            if (p1 < p2)
                swap(v[p1], v[p2]);
            else
                break;
        }
        swap(v[pos1],v[p2]);
        quicksort2(v,pos1,p2-1);
        quicksort2(v,p2+1,pos2);
    }

    二、快速排序的分析

    最坏情况、平均情况什么的,懒得写了,书上很清楚,不啰嗦了,算法导论上也有很多。

  • 相关阅读:
    面向对象的静态属性和静态方法
    面向对象魔术方法及类的自动加载
    面向对象
    mysql cmd 创表查表练习
    创建表 查询表以及添加数据
    windows cmd命令
    4.20 mysq数据库 创建表
    cmd控制数据库初步了解
    Jquery初步了解
    故宫博物院项目 JS功能整理
  • 原文地址:https://www.cnblogs.com/likaiming/p/8638656.html
Copyright © 2020-2023  润新知