#include<stdio.h>
#include<conio.h>
seq_search()
{
int a[10],i,k;
printf("please input ten number");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("please input the key for search");
scanf("%d",&k);
for(i=0;i<10;i++)
{
if(a[i]==k)
{printf("sucess!the number is %d",i+1);
return(0);}
printf("failure");
return(0);}}
half_search()
{
int mid,low,high;
int b[10],m,key,h;
printf("please input ten number:");
for(m=0;m<10;m++)
scanf("%d",&b[m]);
printf("please input the key for search:");
scanf("%d",&h);
low=0;
high=9;
while(low<=high)
{mid=(low+high)/2;
if(b[mid]>h) high=mid-1;
else {if(b[mid]<h) low=mid+1;
else {printf("sucess!");
return(0);}
}
}
printf("failure!");
}
main()
{
int a[10],k,i;
clrscr();
printf("1.seq_search;");
printf("2.half_search;");
printf("please input your choice:1 or 2");
scanf("%d",&i);
if(i==1) seq_search();
else half_search();
}
1、运算器
问题描述:加减乘运算器。
要 求:使用给定文件进行输入输出,必须采用双向链表实现任意位数的正负整数或小数的加法、减法和乘法运算。每个结点存储一位数字。算出的结果若是小数,整数部分的高位若为0要去掉,小数部分的低位若为0要去掉,若0085.56700,最后结果应为85.567。
文件说明:给定的文件a*.txt为第一个数,b*.txt为第二个数,要求加法产生的结果存储在add*.txt中,减法产生的结果存储在sub*.txt中,乘法产生的结果存储在mul*.txt中,*为对应的一组数据,共给出十组数据。并提供十组加减乘结果,供大家对照参考。
2、排序算法验证及评价
问题描述:排序器
要 求:实现以下六种排序算法,将给定的不同规模大小的数据文件(data01.txt,data02.txt,data03.txt,data04.txt)进行排序,并将排序结果分别存储到sorted01.txt,sorted02.txt,sorted03.txt和sorted04.txt文件中。
1)、Shell排序; 2)、Quick排序
3)、锦标赛排序; 4)、堆排序
5)、归并排序; 6)、基数排序
在实现排序算法1)~4)时,统计数据元素比较的次数和交换的次数,进而对这四种算法在特定数据条件下的效率进行分析和评判。
堆排序
#include<stdlib.h>
#include<time.h>
#include<bios.h>
#include<stdio.h>
#include<alloc.h>
#include<math.h>
#define N 20
#define NUM 32749
long ran()
{static long a=203;
a=(a*100001+19)%18307;
return a;
}
long nr()
{float sum,jrad,radn[N],nrand;
int i;
srand((unsigned)(time(NULL)+ran()));
sum=0.0;
for(i=0;i<N;i++)
{jrad=(float)(rand()%NUM)/NUM;
radn[i]=2*jrad;
sum+=radn[i];
}
nrand=sum*sqrt(3.0/N);
return (long)nrand*random(1000);
}
void heapadjust(long huge *r,long s,long m)
{long rc,j;
rc=r[s];
for(j=2*s;j<=m;j=j*2)
{if(j<m&&r[j]<r[j+1]) j++;
if(rc>=r[j]) break;
r[s]=r[j];s=j;
}
r[s]=rc;
}
void heapsort(long huge *r,long n)
{long temp,i;
for(i=n/2;i>0;i--)
heapadjust(r,i,n);
for(i=n;i>1;i--)
{temp=r[1];
r[1]=r[i];
r[i]=temp;
heapadjust(r,1,i-1);
}
}
main(int argc,char *argv[])
{long huge *r;
long tm1,tm2,tm0,n,i,j,k=0,y,n0;
n=atol(argv[1]);
n=n>1?n>150000?150000:n:2;
clrscr();
if((r=(long huge *)farcalloc(n+1,4))==NULL) {printf("\nToo much datas!--r");exit(1);}
tm0=0;n0=3;
for(k=0;k<n0;k++)
{for(i=1;i<=n;i++) r[i]=nr()*nr();
tm1=biostime(0,0);
heapsort(r,n);
tm2=biostime(0,0)-tm1;tm0=tm0+tm2;
/*for(i=1;i<=n;i++)
printf("%10ld",r[i]);
printf("\n");*/
printf("\nN=%ld heapsorting time: %10.4f(s)",n,tm2/18.2);
}
printf("\nN=%ld\n heap--avertime: %10.4f(s)\n",n,(float)tm0/n0/18.2);
}