6-5 快速排序的实现

6-5 快速排序的实现 (10 分)
给一个无序表,使用快速排序算法对它进行排序。

函数接口定义:

int Partition(SqList &L, int low, int high);
void QSort(SqList &L, int low, int high);
void QuickSort(SqList &L);

其中L是待排序表,low和high是排序的区间。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20

typedef int KeyType;

typedef struct {
    KeyType key;
}RedType;

typedef struct {
    RedType r[MAXSIZE + 1];
    int length;
}SqList;

int Partition(SqList &L, int low, int high);
void QSort(SqList &L, int low, int high);
void QuickSort(SqList &L);

int main () {
    SqList L;
    scanf("%d", &L.length);

    for(int i = 1; i <= L.length; ++ i)
        scanf("%d", &L.r[i].key);

    QuickSort(L);

    for(int i = 1; i <= L.length; ++ i)
        printf("%d ", L.r[i].key);
    printf("\n");

    return 0;
}

/* 你的代码将被嵌在这里 */

####输入格式: 第一行输入一个数n,表示表内的元素个数,接下来一行n个数字,依次为表内元素值。

####输出格式: 依次输出从小到大排序过后的元素值。

输入样例:
5
5 4 3 2 1
结尾无空行
输出样例:
1 2 3 4 5
结尾无空行

C(gcc)

int Partition(SqList& L, int low, int high)
{
    int temp = L.r[low].key; 
    L.r[0].key = L.r[low].key;
    while (low < high) {
        while (low < high && L.r[high].key >= temp) high--;
        L.r[low].key = L.r[high].key;
        while (low < high && L.r[low].key <= temp) low++;
        L.r[high].key = L.r[low].key;
    }
    L.r[low].key = L.r[0].key;
    return low;
}
void QSort(SqList& L, int low, int high) 
{
    int  pivotloc;
    if (low < high)
    {
        pivotloc = Partition(L, low, high);
        QSort(L, low, pivotloc - 1);
        QSort(L, pivotloc + 1, high);
    }
}
void QuickSort(SqList& L)
{
    QSort(L, 1, L.length);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微__凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值