快速排序法(C语言)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档