数据结构C语言编程题 希尔排序排序和折半查找算法查找

实验1、编写程序实现希尔排序。要求输入待排序的序列和输出排序后的序列。采用三趟排序,排序时的增量分别为5、3、1。

实验2、编写程序实现折半查找算法。要求以用户给定的关键字进行查询,显示查询是否成功,若查询成功该并显示该关键字在数组中的位置。
能不能来个大神来给我回答下啊!!!!

实验一


#include<stdio.h>
#include<stdlib.h>

#define N 10

void shellpass(int a[], int n, int d)
{
int i,j,temp;
for(i=d;i<n;i++)
{
if(a[i]<a[i-d])
{
temp=a[i];
for(j=i-d;j>=0&&temp<a[j];j-=d)
a[j+d]=a[j];
a[j+d]=temp;
}
}
}
void shellsort(int a[], int n, int delta[], int t)
{
int i, j;
for(i=0; i<t; i++)
{
shellpass(a, n, delta[i]);

printf("第%d趟希尔排序,增量为%d,排序之后的结果\n",i+1,delta[i]);
for(j=0; j<n; j++)
{
printf("%d\t",a[j]);
}
printf("\n");
}
}

void main()
{
int n=N, a[N];
int b[3] = {5,3,1};
int i;
printf("输入%d个数\n", n);
for(i=0;i<n;i++)
{
printf("第%d个数:\t",i+1);
scanf("%d",&a[i]);
}

shellsort(a, n, b, 3);

printf("最终希尔排序之后的结果\n");
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
printf("\n");
}



实验二


#include<stdio.h>
#include<stdlib.h>

#define N 10

void shellpass(int a[], int n, int d)
{
int i,j,temp;
for(i=d;i<n;i++)
{
if(a[i]<a[i-d])
{
temp=a[i];
for(j=i-d;j>=0&&temp<a[j];j-=d)
a[j+d]=a[j];
a[j+d]=temp;
}
}
}
void shellsort(int a[], int n, int delta[], int t)
{
int i, j;
for(i=0; i<t; i++)
{
shellpass(a, n, delta[i]);

//printf("第%d趟希尔排序,增量为%d,排序之后的结果\n",i+1,delta[i]);
//for(j=0; j<n; j++)
//{
// printf("%d\t",a[j]);
//}
//printf("\n");
}
}

int bisearch(int a[], int l, int r, int i)
{
int m = (l+r)/2;
if (l==r)
return -1;

if (a[m]==i)
return m;
else if(a[m]>i)
return bisearch(a, l, m, i);
else
return bisearch(a, m+1, r, i);
}

void main()
{
int n=N, a[N];
int b[3] = {5,3,1};
int i, j;
printf("输入%d个数\n", n);
for(i=0;i<n;i++)
{
printf("第%d个数:\t",i+1);
scanf("%d",&a[i]);
}

shellsort(a, n, b, 3);

printf("排序之后的结果\n");
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
printf("\n");

do
{
printf("\n请输入需要查询的数字,结束请输入#\n");
if (scanf("%d",&i))
{
j = bisearch(a, 0, n, i);
if (j==-1)
printf("没有找到关键字%d\n", i);
else
printf("关键字%d是排序后数组的第%d个数字\n", i,j+1);
}
else
break;
}while(true);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-09
你好
很高兴为你解答

答案是:亲,编两个程序,把分数提高些。

满意请采纳,谢谢追问

现在分数应该差不多了吧!

相似回答