数据结构实验报告.docx
- 文档编号:3958506
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:12
- 大小:57.75KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
信息工程大学数据结构实验(实习)报告
实验(实习)名称排序实验(实习)日期2012.5.30得分指导老师宣文霞
系计算机系专业网络工程班级1袁盼学号
1、需求分析
(1)实现直接插入排序算法
编写一个程序实现直接插入排序过程,并输出{9,8,7,6,5,4,3,2,1,0}的排序过程。
输出形式例如:
初始关键字9876543210
排序次数i=18976543210
i=27896543210
……
最后结果:
0123456789
(2)——实现希尔插入排序算法
编写一个程序实现希尔插入排序过程,并输出{9,8,7,6,5,4,3,2,1,0}的排序过程。
(3)实现冒泡排序算法
编写一个程序实现冒泡排序过程,并输出{9,8,7,6,5,4,3,2,1,0}的排序过程。
(4)实现快速排序算法
编写一个程序实现快速排序过程,并输出{6,8,7,9,0,1,3,2,4,5}的排序过程。
(5)实现直接选择排序算法
编写一个程序实现直接排序过程,并输出{6,8,7,9,0,1,3,2,4,5}的排序过程。
2.设计
一、直接插入排序
#include
#defineMAXE20
typedefintKeyType;
typedefcharInfoType[10];
typedefstruct/*记录类型*/
{
KeyTypekey;/*关键字项*/
InfoTypedata;/*其他数据项,类型为InfoType*/
}RecType;
voidInsertSort(RecTypeR[],intn)/*对R[0..n-1]按递增有序进行直接插入排序*/
{
inti,j,k;
RecTypetemp;
for(i=1;i { temp=R[i]; j=i-1;/*从右向左在有序区R[0..i-1]中找R[i]的插入位置*/ while(j>=0&&temp.key { R[j+1]=R[j];/*将关键字大于R[i].key的记录后移*/ j--; } R[j+1]=temp;/*在j+1处插入R[i]*/ printf("i=%d",i);/*输出每一趟的排序结果*/ for(k=0;k printf("%3d",R[k].key); printf("\n"); } } voidmain() { inti,k,n=10; KeyTypea[]={9,8,7,6,5,4,3,2,1,0}; RecTypeR[MAXE]; for(i=0;i R[i].key=a[i]; printf("\n"); printf("初始关键字");/*输出初始关键字序列*/ for(k=0;k printf("%3d",R[k].key); printf("\n"); InsertSort(R,n); printf("最后结果");/*输出初始关键字序列*/ for(k=0;k printf("%3d",R[k].key); printf("\n\n"); } 二、希尔排序 #include #defineMAXE20/*线性表中最多元素个数*/ typedefintKeyType; typedefcharInfoType[10]; typedefstruct/*记录类型*/ { KeyTypekey;/*关键字项*/ InfoTypedata;/*其他数据项,类型为InfoType*/ }RecType; voidShellSort(RecTypeR[],intn)/*希尔排序算法*/ { inti,j,d,k; RecTypetemp; d=n/2;/*d取初值n/2*/ while(d>0) { for(i=d;i { j=i-d; while(j>=0&&R[j].key>R[j+d].key) { temp=R[j];/*R[j]与R[j+d]交换*/ R[j]=R[j+d]; R[j+d]=temp; j=j-d; } } printf("d=%d: ",d);/*输出每一趟的排序结果*/ for(k=0;k printf("%3d",R[k].key); printf("\n"); d=d/2;/*递减增量d*/ } } voidmain() { inti,k,n=10; KeyTypea[]={9,8,7,6,5,4,3,2,1,0}; RecTypeR[MAXE]; for(i=0;i R[i].key=a[i]; printf("\n"); printf("初始关键字");/*输出初始关键字序列*/ for(k=0;k printf("%3d",R[k].key); printf("\n"); ShellSort(R,n); printf("最后结果");/*输出初始关键字序列*/ for(k=0;k printf("%3d",R[k].key); printf("\n\n"); } 三、冒泡排序 #include #defineMAXE20/*线性表中最多元素个数*/ typedefintKeyType; typedefcharInfoType[10]; typedefstruct/*记录类型*/ { KeyTypekey;/*关键字项*/ InfoTypedata;/*其他数据项,类型为InfoType*/ }RecType; voidBubbleSort(RecTypeR[],intn)/*冒泡排序算法*/ { inti,j,k; RecTypetemp; for(i=0;i { for(j=n-1;j>i;j--)/*比较,找出本趟最小关键字的记录*/ if(R[j].key { temp=R[j];/*R[j]与R[j-1]进行交换,将最小关键字记录前移*/ R[j]=R[j-1]; R[j-1]=temp; } printf("i=%d",i);/*输出每一趟的排序结果*/ for(k=0;k printf("%2d",R[k].key); printf("\n"); } } voidmain() { inti,k,n=10; KeyTypea[]={9,8,7,6,5,4,3,2,1,0}; RecTypeR[MAXE]; for(i=0;i R[i].key=a[i]; printf("\n"); printf("初始关键字");/*输出初始关键字序列*/ for(k=0;k printf("%2d",R[k].key); printf("\n"); BubbleSort(R,n); printf("最后结果");/*输出初始关键字序列*/ for(k=0;k printf("%2d",R[k].key); printf("\n\n"); } 四、实现快速排序法 #include #defineMAXE20/*线性表中最多元素个数*/ typedefintKeyType; typedefcharInfoType[10]; typedefstruct/*记录类型*/ { KeyTypekey;/*关键字项*/ InfoTypedata;/*其他数据项,类型为InfoType*/ }RecType; voidQuickSort(RecTypeR[],ints,intt)/*对R[s]至R[t]的元素进行快速排序*/ { inti=s,j=t,k; RecTypetemp; if(s { temp=R[s];/*用区间的第个记录作为基准*/ while(i! =j)/*从区间两端交替向中间扫描,直至i=j为止*/ { while(j>i&&R[j].key>temp.key) j--;/*从右向左扫描,找第个关键字小于temp.key的R[j]*/ if(i { R[i]=R[j]; i++; } while(i i++;/*从左向右扫描,找第个关键字大于temp.key的记录R[i]*/ if(i { R[j]=R[i]; j--;} } R[i]=temp; printf("");/*输出每一趟的排序结果*/ for(k=0;k<10;k++) if(k==i) printf("[%d]",R[k].key); else printf("%4d",R[k].key); printf("\n"); QuickSort(R,s,i-1);/*对左区间递归排序*/ QuickSort(R,i+1,t);/*对右区间递归排序*/ } } voidmain() { inti,k,n=10; KeyTypea[]={6,8,7,9,0,1,3,2,4,5}; RecTypeR[MAXE]; for(i=0;i R[i].key=a[i]; printf("\n"); printf("初始关键字");/*输出初始关键字序列*/ for(k=0;k printf("%4d",R[k].key); printf("\n"); QuickSort(R,0,n-1); printf("最后结果");/*输出初始关键字序列*/ for(k=0;k printf("%4d",R[k].key); printf("\n\n"); } 五、实现直接选择排序法 #include #defineMAXE20/*线性表中最多元素个数*/ typedefintKeyType; typedefcharInfoType[10]; typedefstruct/*记录类型*/ { KeyTypekey;/*关键字项*/ InfoTypedata;/*其他数据项,类型为InfoType*/ }RecType; voidSelectSort(RecTypeR[],intn)/*直接选择排序算法*/ { inti,j,k,l; RecTypetemp; for(i=0;i { k=i; for(j=i+1;j if(R[j].key k=j;/*k记下目前找到的最小关键字所在的位置*/ if(k! =i)/*交换R[i]和R[k]*/ { temp=R[i];R[i]=R[k];R[k]=temp; } printf("i=%d",i);/*输出每一趟的排序结果*/ for(l=0;l printf("%2d",R[l].key); printf("\n"); } } voidmain() { inti,k,n=10,m=5; KeyTypea[]={6,8,7,9,0,1,3,2,4,5}; RecTypeR[MAXE]; for(i=0;i R[i].key=a[i]; printf("\n"); printf("初始关键字");/*输出初始关键字序列*/ for(k=0;k printf("%2d",R[k].key); printf("\n"); SelectSort(R,n); printf("最后结果");/*输出初始关键字序列*/ for(k=0;k printf("%2d",R[k].key); printf("\n\n"); } 3、调试分析 实验过程中遇到不少类似变量没有定义和全角,半角的问题,经过C++程序编译指向错误,最终得到解决,通过本次实验,我学到了另外一种处理数据的方法。 4、测试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)