#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LIST_SIZE 50000
typedef int elementtype ;
typedef int keytype ;
typedef struct RedType{
keytype key;
elementtype e;
}RedType;
typedef struct {
RedType r[MAX_LIST_SIZE+1];
int length;
}SqList;
//快速排序
int Partition(SqList &L,int low,int high){
//交换顺序表L中子表r[row..high]的记录,枢轴记录到位,并返回其所在位//置,此时在它之前(后)的记录均不大(小)于它。
//请在此处添加代码
L.r[0]=L.r[low];
keytype 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[high]=L.r[0];
return low;
}
void QSort(SqList &L,int low,int high){
//对顺序表中的子序列L.r[low..high]作快速排序。
//请在此处添加代码
if(low<high){
int pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);
QSort(L,pivotloc+1,high);
}
}
void InitSq(SqList &l,int m){
//第0单元未使用.
int k;
l.length=m+1;//从1-l.length存储数据,0 未用.
for(int i=1;i<l.length;i++){
k=rand();
while(k/10000!=0){
k=rand();
}
l.r[i].key=k;
}
}
void print(SqList l){
for(int i=1;i<l.length;i++){
printf("%d\t",l.r[i].key);
}
printf("\n");
}
void main(){
srand(time(NULL));
SqList l;
InitSq(l,10);
printf("排序之前:\n");
print(l);
QSort(l,1,10);
printf("排序之后:\n");
print(l);
}