数
据
结
构
课
程
设
计
学部:信息科学与技术学部
专业:计算机科学与技术
目录
一、 1
二、实验目的和要求1
三、实验内容和原理1
四、实验环境1
五、自定义函数2
1.生成随机数的函数2
2.快速排序函数2
3.堆排序函数3
4.显示函数3
5.主函数4
六、运行截图4
七、代码清单5
实验题目
排序综合 利用随机函数产生N个随机整数,对这些数方法排序排序排序。
C++6.0
五、自定义函数
1.生成随机数的函数
/*--------------------产生随机数-------------------*/
void creat(sqlist *l)
{
int i;
printf("请输入要产生的随机数个数:");
scanf("%d",&l->length);
srand((unsigned)time(NULL)); //给srand()提供一个种子,它是一个unsigned int类型,
for(i=1;i<=l->length;i++)
{
l->r[i].key = rand() %900+100; //调用rand(),返回一个随机数(在0到32767之间)
printf("%d ",l->r[i].key);
}
printf("\n");
}
2.快速排序函数
/*交换顺序表中子表r[low...high]的记录,使枢轴记录到位,并返回其所在的位置*/
int partion(sqlist *l,int low,int high)
{ int pivotkey;
l->r[0]=l->r[low]; //用子表的第一个记录作枢轴记录
pivotkey=l->r[low].key; //枢轴记录关键字
while(low
{ while(lowr[high].key>=pivotkey) --high;
l->r[low]=l->r[high]; //将比枢轴记录小的记录移到低端
while(lowr[low].key<=pivotkey) ++low;
l->r[high]=l->r[low]; //将比枢轴记录大的记录移到低端
}
l->r[low]=l->r[0]; //枢轴记录到位
return low; //返回枢轴位置
}
/*--------------快速排序------------------*/
void Qsort(sqlist *l,int low,int high)
{ int pivotloc;
if(low
{ pivotloc=partion(l,low,high); //将l.r[low..high]一分为二
Qsort(l,low,pivotloc-1); //对低子表递归排序
Qsort(l,pivotloc+1,high); //对高子表递归排序
}
}
3.堆排序函数
/*调整h->r[s]的关键字,使h->r[s]成为一个大顶堆*/
void heapadjust(sqlist *h,int s,int m)
{ keytype rc;
int j;
rc=h->r[s];
for(j=2*s;j<=m;j*=2)
{ if(jr[j].keyr[j+1].key)
++j;
if(rc.key>=h->r[j].key) break;
h->r[s]=h->r[j];
s=j;
}
h->r[s]=rc;
}
/*对顺序表h进行堆排序*/
void heapsort(sqlist *h)
{ keytype rc;int i;
for(i=h->length/2;i>0;--i)
heapadjust(h,i,h->length);
for(i=h->length;i>1;--i)
{ rc=h->r[1];
h->r[1]=h->r[i];
h->r[i]=rc;
heapadjust(h,1,i-1);