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

发布网友 发布时间:2022-04-22 11:08

我来回答

2个回答

热心网友 时间:2022-04-22 18:38

实验一


#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);
}

热心网友 时间:2022-04-22 19:56

你好
很高兴为你解答

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

满意请采纳,谢谢追问现在分数应该差不多了吧!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com