欢迎光临散文网 会员登陆 & 注册

算法 - 快速排序 详细讲解!Java实现+复杂度计算【微软程序员阿婧的基础入门

2023-06-09 08:38 作者:_Le_Tian  | 我要投稿

C语言实现QuickSort

// ----- 快速排序 -----


int Partition(SqList &L, int low, int high)

{ // 交换顺序表L中子序列L.r[low..high]的记录,使枢轴记录到位,并返回其所在位置,此时,在它之前(后)的记录均不大(小)于它

    KeyType pivotkey;

    L.r[0] = L.r[low];       // 用子表的第一个记录作为枢轴记录

    pivotkey = L.r[low].key; // 枢轴记录关键字

    while (low < high)

    { // 从表的两端交替地向中间扫描

        while (low < high && L.r[high].key >= pivotkey)

        {

            --high;

        }

        L.r[low] = L.r[high]; // 将比枢轴记录小的记录移到低端

        while (low < high && L.r[low].key <= pivotkey)

        {

            ++low;

        }

        L.r[high] = L.r[low]; // 将比枢轴记录大的记录移到高端

    }

    L.r[low] = L.r[0]; // 枢轴记录到位

    return low;        // 返回枢轴位置

}


void QSort(SqList &L, int low, int high)

{ // 对顺序表L中的子序列L.r[low..high]进行快速排序

    int pivotloc;

    if (low < high)

    {                                       // 待排序列长度大于1

        pivotloc = Partition(L, low, high); // 将L.r[low..high]一分为二

        QSort(L, low, pivotloc - 1);        // 对低子表递归排序,pivotloc是枢轴位置

        QSort(L, pivotloc + 1, high);       // 对高子表递归排序

    }

}


void QuickSort(SqList &L)

{ // 对顺序表L进行快速排序

    QSort(L, 1, L.length);

}

算法 - 快速排序 详细讲解!Java实现+复杂度计算【微软程序员阿婧的基础入门的评论 (共 条)

分享到微博请遵守国家法律