数据结构实验报告同名7971.docx
《数据结构实验报告同名7971.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告同名7971.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构实验报告同名7971
数据结构实验报告(同名7971)
南京信息工程大学数据结构实验(实习)报告
实验(实习)名称内排序实验(实习)日期2012.5.30得分指导老师宣文霞
系计算机系专业网络工程班级1姓名袁盼学号20102300242
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;kprintf("%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;iR[i].key=a[i];
printf("\n");
printf("初始关键字");/*输出初始关键字序列*/
for(k=0;kprintf("%3d",R[k].key);
printf("\n");
InsertSort(R,n);
printf("最后结果");/*输出初始关键字序列*/
for(k=0;kprintf("%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;kprintf("%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;iR[i].key=a[i];
printf("\n");
printf("初始关键字");/*输出初始关键字序列*/
for(k=0;kprintf("%3d",R[k].key);
printf("\n");
ShellSort(R,n);
printf("最后结果");/*输出初始关键字序列*/
for(k=0;kprintf("%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;kprintf("%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;iR[i].key=a[i];
printf("\n");
printf("初始关键字");/*输出初始关键字序列*/
for(k=0;kprintf("%2d",R[k].key);
printf("\n");
BubbleSort(R,n);
printf("最后结果");/*输出初始关键字序列*/
for(k=0;kprintf("%2d",R[k].key);
printf("\n\n");
}
四、实现快速排序法
#include
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;iR[i].key=a[i];
printf("\n");
printf("初始关键字");/*输出初始关键字序列*/
for(k=0;kprintf("%2d",R[k].key);
printf("\n");
SelectSort(R,n);
printf("最后结果");/*输出初始关键字序列*/
for(k=0;kprintf("%2d",R[k].key);
printf("\n\n");
}
3、调试分析
实验过程中遇到不少类似变量没有定义和全角,半角的问题,经过C++程序编译指向错误,最终得到解决,通过本次实验,我学到了另外一种处理数据的方法。
4、测试结果