一、实验目的: 掌握常用的查找与排序算法。 二、实验内容 1、用简单插入排序法,对关键字值序列为:9,2,
发布网友
发布时间:2022-05-15 04:41
我来回答
共2个回答
热心网友
时间:2023-10-09 09:56
第一题:
#include <stdio.h>
#define MAX 100
typedef int datatype;
typedef struct
{
datatype data;
}record;
typedef struct
{
record r[MAX+1];
int length;
}table;
void creat(table *tab)
{
printf("输入需要排列的数字个数:最大100\n");
scanf("%d",&tab->length);
for(int i=1;i<=tab->length;i++)
{ printf("请输入第%d个数据:",i);
scanf("%d",&tab->r[i]);
}
}
void print(table *tab)
{
for(int i=1;i<=tab->length;i++)
{
printf("%4d",tab->r[i]);
} printf("\n");
}
void insertsort(table *tab)
{
int i,j;
printf("原始数据为: ");
print(tab);
for(i=2;i<=tab->length;i++)
{
j=i-1;
tab->r[0].data=tab->r[i].data;
while(tab->r[0].data<tab->r[j].data)
{
tab->r[j+1].data=tab->r[j].data;
j--;
}
tab->r[j+1].data=tab->r[0].data;
printf("第%d次为 :",i-1);
print(tab);
}
}
void main()
{
table tab;
creat(&tab);
insertsort(&tab);
}
第二题:
#include <stdio.h>
#define MAX 100
typedef int datatype;
typedef struct
{
datatype data;
}record;
typedef struct
{
record r[MAX+1];
int length;
}table;
void creat(table *tab)
{
printf("输入需要插入的数字个数:最大100");
scanf("%d",&tab->length);
for(int i=1;i<=tab->length;i++)
{ printf("请输入第%d个数据:",i);
scanf("%d",&tab->r[i]);
}
}
void print(table *tab)
{
for(int i=1;i<=tab->length;i++)
{
printf("%4d",tab->r[i]);
} printf("\n");
}
void find(table *tab)
{ int find;
int i,j,left,right,mid;
printf("输入你要查找的数:");
scanf("%d",&find);
for(i=2;i<=tab->length;i++)
{
left=1;
right=i-1;
tab->r[0].data=find;
while(left<=right)
{
mid=(left+right)/2;
if(tab->r[0].data<tab->r[mid].data)
right=mid-1;
else left=mid+1;
}
if(tab->r[left].data==find)printf("\n你要查找的数在第%d个",left);
}
}
void main()
{
table tab;
creat(&tab);
print(&tab);
find(&tab);
}
热心网友
时间:2023-10-09 09:56
第一题:
#include <stdio.h>
#define MAX 100
typedef int datatype;
typedef struct
{
datatype data;
}record;
typedef struct
{
record r[MAX+1];
int length;
}table;
void creat(table *tab)
{
printf("输入需要排列的数字个数:最大100\n");
scanf("%d",&tab->length);
for(int i=1;i<=tab->length;i++)
{ printf("请输入第%d个数据:",i);
scanf("%d",&tab->r[i]);
}
}
void print(table *tab)
{
for(int i=1;i<=tab->length;i++)
{
printf("%4d",tab->r[i]);
} printf("\n");
}
void insertsort(table *tab)
{
int i,j;
printf("原始数据为: ");
print(tab);
for(i=2;i<=tab->length;i++)
{
j=i-1;
tab->r[0].data=tab->r[i].data;
while(tab->r[0].data<tab->r[j].data)
{
tab->r[j+1].data=tab->r[j].data;
j--;
}
tab->r[j+1].data=tab->r[0].data;
printf("第%d次为 :",i-1);
print(tab);
}
}
void main()
{
table tab;
creat(&tab);
insertsort(&tab);
}
第二题:
#include <stdio.h>
#define MAX 100
typedef int datatype;
typedef struct
{
datatype data;
}record;
typedef struct
{
record r[MAX+1];
int length;
}table;
void creat(table *tab)
{
printf("输入需要插入的数字个数:最大100");
scanf("%d",&tab->length);
for(int i=1;i<=tab->length;i++)
{ printf("请输入第%d个数据:",i);
scanf("%d",&tab->r[i]);
}
}
void print(table *tab)
{
for(int i=1;i<=tab->length;i++)
{
printf("%4d",tab->r[i]);
} printf("\n");
}
void find(table *tab)
{ int find;
int i,j,left,right,mid;
printf("输入你要查找的数:");
scanf("%d",&find);
for(i=2;i<=tab->length;i++)
{
left=1;
right=i-1;
tab->r[0].data=find;
while(left<=right)
{
mid=(left+right)/2;
if(tab->r[0].data<tab->r[mid].data)
right=mid-1;
else left=mid+1;
}
if(tab->r[left].data==find)printf("\n你要查找的数在第%d个",left);
}
}
void main()
{
table tab;
creat(&tab);
print(&tab);
find(&tab);
v