快速排序法(C语言)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#define randx(x) (rand()%x)
typedef int KeyType;
typedef int DataType;
typedef struct
{
KeyType key;/*排序码字段*/
DataType info; /*记录的其它字段*/
}RecordNode;
typedef struct
{
int n; /*文件中的记录个数,可以视为常量*/
RecordNode *record;
}SortObject;
void creatsort(SortObject * pvector, int &l, int &r)//新建二叉排序树{
int i; int k;
printf("您即将要创建一个序列\n");
printf("\n请输入该序列元素的个数\n");
scanf("%d", &pvector->n);
pvector->record = (RecordNode*)malloc((sizeof(RecordNode))*(pvector->n));
printf("\n你要以什么方式创建序列?\n方式1:自动创建请输入1,方式2:手动创建请输入0\n");
scanf("%d", &k);
if (k)
{
srand((int)time(0));
for (i = 0; i < pvector->n; i++)
{
if(pvector->n<100)
pvector->record[i].key = randx(100);
else if((pvector->n<1000))
pvector->record[i].key = randx(1000);
else
pvector->record[i].key = randx(pvector->n);
}
}
else
{
printf("\n请输入%d个大小不一样的整数\n", pvector->n);
for (i = 0; i < pvector->n; i++)
{
scanf("%d", &pvector->record[i].key);
}
}
if (pvector)
printf("\n序列创建成功!\n");
else
printf("\n序列创建失败!\n");
l = 0, r = pvector->n-1;
}
void show(SortObject * pvector)
{
printf("\n当前序列为:\n");
if (!pvector)
printf("当前序列为空");
else
for (int i = 1; i <= pvector->n; i++)
{
printf(" %d ", pvector->record[i-1].key);
if (i % 15 == 0)
printf("\n");
}
printf("\n");
}
void quickSort(SortObject* &pvector, int l, int r)
{
int i, j;
RecordNode temp, *data = pvector->record;
if (l >= r)
return; /* 只有一个记录或无记录,则无须排序*/
i = l;
j = r;
temp = data[i];
while (i != j)
{/* 找Rl的最终位置*/
while (i< j && data[j].key >= temp.key)
j--; /* 向左扫描找排序码小于temp.key的记录*/ if (i< j)
data[i++] = data[j];
while (i< j && data[i].key <= temp.key)
i++; /* 向右扫描找排序码大于temp.key的记录*/ if (i< j)
data[j--] = data[i];
}
data[i] = temp; /* 将Rl存入其最终位置*/
quickSort(pvector, l, i - 1); /* 递归处理左区间*/
quickSort(pvector, i + 1, r); /* 递归处理右区间*/
}
void interface(void)
{
printf("\n&&&&&&&&&&&&&&输入序号执行相应操作&&&&&&&&&&&&&&&&&\n");
printf(" 输入1,重新建立序列!\n");
printf("---------------------------------------------------\n");
printf(" 输入2,快速排序当前序列!\n");
printf("---------------------------------------------------\n");
printf(" 输入3,显示当前序列!\n");
printf("---------------------------------------------------\n");
printf(" 输入其他,退出操作!\n");
printf("---------------------------------------------------\n");
}
void operation(SortObject* pvector, int l, int r)
{
int k = 1, num;