查询与排序 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院专业班学号
协作者_____________教师评定_________________ 实验题目查询与排序
综合实验评分表
实验报告
一、实验目的与要求
1、掌握散列表的构造及实现散列查找;
2、掌握堆排序的算法;
3、综合比较各类排序算法的性能。
二、实验容
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"windows.h"
#define MAX 20
typedef struct{
unsigned long key;
int result;
char name[30];}RNode;
RNode t[MAX],r[MAX];
int h(unsigned long k) /*散列函数*/
{
return((k-3109005700)%11);
}
void insert(RNode t[],RNode x) /*插入函数,以线性探查方法解决冲突*/ {
int i,j=0;
i=h(x.key);
while((j
j++;
if(j==MAX) printf("full\n");
i=(i+j)%MAX;
if(t[i].key==0)
{t[i]=x;}
else
{
if(t[i].key==x.key)
printf("记录已存在!\n");
}
}
int search(RNode t[],unsigned long k) /*插入函数,以线性探查方法解决冲突*/ {
int i,j=0;
i=h(k);
while((j j++; i=(i+j)%MAX; if(t[i].key==k) return(i); if(j==MAX) return MAX; else return(-i); } void sift(RNode r[],int v,int w) { int i,j; RNode a; i=v; a=r[i]; j=2*i+1; while(j<=w) { if((j j++; if(a.result>r[j].result) {r[i]=r[j];i=j;j=2*j+1;} else break; } r[i]=a; } void sort(RNode r[],int n) { int i; RNode y; for(i=n/2-1;i>=0;i--) sift(r,i,n-1); for(i=n-1;i>0;i--) {y=r[0];r[0]=r[i];r[i]=y; printf("学生:%s\t学生学号:%u\t学生成 绩:%d\n",r[i].name,r[i].key,r[i].result); sift(r,0,i-1); } printf("学生:%s\t学生学号:%u\t学生成 绩:%d\n",r[0].name,r[0].key,r[0].result); } int menu() /*菜单函数*/ { int select; printf("\n\n"); printf("\n"); printf("\t\t*************查找排序实验******************\n"); printf("\t\t*\n"); printf("\t\t*************欢迎进入系统******************\n"); printf("\t\t* menu: *\n"); printf("\t\t* 1.查找*\n"); printf("\t\t* 2.排序*\n"); printf("\t\t* 0.退出*\n"); printf("\t\t*******************************************\n"); printf("\n"); printf("\t\t\t请输入0--2\n "); printf("\n"); printf("请选择您所要的操作(选择(0)退出):"); scanf("%d",&select); getchar(); return(select); } void main() /*主函数*/ { int i,s,n,select; int j=0,m=0; RNode y; for(i=0;i t[i].key=0; /*初始化*/