6-7 数据结构考题 - 快速排序 - 划分函数 (25 分)
用顺序表作存储结构,输入一组数据,用快速排序法对其进行排序。
顺序表的类型描述:
#define MAXSIZE 50 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct
{ ElemType r[MAXSIZE +1]; // r[0]闲置或另作它用
int length;
}SqList;
函数接口定义:
下面给出了 快速排序 - 划分函数 的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。
请先将以下代码中画横线的部分补充完整,然后将完整的函数 Partition 提交系统,完成题目要求的功能。
int Partition(SqList &L,int low,int high)
{ int i,j;
L.r[0]=L.r[____];
while ( ____ )
{ while ( low<high && L.r[____]>=L.r[0] )
high--;
L.r[____]=L.r[____];
while ( low<high && L.r[____]<=L.r[0] )
low++;
L.r[____]=L.r[____];
}
L.r [____] =L.r[0];
return low;
}
int Partition(SqList &L,int low,int high) 快速排序算法中,对 顺序表 low ~ high范围内的元素进行划分的函数
测试主程序样例:
int main ()
{ SqList L; int low,high;
create(L);
low=1; high=L.length;
QuickSort(L,low,high);
print(L);
return 0;
}
输入格式:
第一行输入一个整数n,表示顺序表的元素个数。
第二行输入原始序列的n 个整数。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
8
19 -18 13 26 275 26 7 35
结尾无空行
输出样例:
-18 7 13 19 26 26 35 275
结尾无空行
C++(g++)
int Partition(SqList& L, int low, int high)
{
int i, j;
L.r[0] = L.r[low];
while (low<high)
{
while (low < high && L.r[high] >= L.r[0])
high--;
L.r[low] = L.r[high];
while (low < high && L.r[low] <= L.r[0])
low++;
L.r[high] = L.r[low];
}
L.r[low] = L.r[0];
return low;
}