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);
}