线性表插入类排序算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件基础基础实验报告
系别:地质工程系班级:09测绘学号:0910205006 姓名:严康文实验时间:实验地点:网教中心
实验环境:Turbo c++3.0(vc6.0)
实验名称:线性表的插入类排序算法
实验目的:
(1)掌握简单插入排序算法
(2)掌握希尔排序算法★
实验内容:
a)对无序序列P(1:n)进行插入排序。
备注:需要用到的算法是:insort( )
b)对无序序列P(1:n)进行希尔排序。
备注:需要用到的算法是:shlsort( )
程序代码:(请写上详细的程序注释!注意这是重要的评分依据!) #include"stdio.h"
#include"stdlib.h"
void input(int *v,int *n)
{
int i;
printf("请输入%d元素到线性表\n",*n);
for(i=0;i<*n;i++)
{scanf("%d",v+i);printf("\n请输入下一个元素到线性表\n");}
printf("输入完成,停止输入\n");
}
void output(int *v,int *n)
{int i;
for(i=0;i<*n;i++)
printf("线性表的第%d个元素为%d\n",i+1,*(v+i));
}
int *initsl(int m,int *n)
{
int *v;
v=(int *)malloc(m*sizeof(int));
return v;
}
void insl(int *v,int m,int *n,int i,int b)
{int j;
if(*n==m)
{printf("overflow\n");
return;
}
if(i>*n-1) i=*n+1;
if(i<1) i=1;
for(j=*n;j>=i;j--) v[j]=v[j-1];
v[i-1]=b;
*n=*n+1;
return;
}
void desl(int *v,int m,int *n,int i)
{int j;
if(*n==0)
{printf("underflow\n");
return;
if((i<1)||(i>*n))
printf("not this element is in\n");
return;
}
for(j=i;j<=*n-1;j++)
v[j-1]=v[j];
*n=*n-1;
return;
}
void menu()
{
printf("************请选择需要操作************\n"); printf("************进行插入请选择1************\n");
printf("************进行删除请选择2************\n");
printf("************查找请选择3************\n");
printf("************对分查找请选择4************\n");
printf("************冒泡排序请选择5************\n");
printf("************快速排序请选择6************\n");
printf("************插入排序请选择7************\n");
printf("************希尔排序请选择8************\n");
printf("************退出请选择9************\n");
return;
}
void bserch(int*v,int *n,int x)
{
int i,j,k;
i=1;j=*n;
while(i<=j)
{
k=(i+j)/2;
if(v[k-1]==x) break;
if(v[k-1]>x) j=k-1;
else i=k+1;
}
if(k!=-1) printf("被查找的元素序数是%d\n",k);else printf("not
founded\n");
}
void serch(int*v,int *n,int x)
{
int k=0;
while((k<*n)&&(v[k]!=x)) k=k+1;
if(k==*n) k=-1;
if(k!=-1) printf("被查找的元素序数是%d\n",k+1);else printf("not founded\n");
}
void insort(int *p,int *n)
{
int t;
int j,k;
for(j=1;j<*n;j++)
{
t=p[j];k=j-1;
while((k>=0)&&((p[k])>t))
{p[k+1]=p[k];k=k-1;}
p[k+1]=t;
}
return;