、实验目的:
(1)能够根据问题描述分析,选择合适的逻辑结构和存储结构,培养学生解决实际应用问题的能力;
(2)掌握三种常用排序算法;
(3)会对不同算法进行综合分析和比较。
二、实验内容:
创建本班的学生名单,并记录本班数据结构课程的成绩,分别使用以下排序方法对此成绩单进行排序:
(1)起泡法对成绩分别进行从高到底和从低到高排序。
(2)折半插入法对成绩分别进行从高到底和从低到高排序。
(3)直接选择排序法对成绩分别进行从高到底和从低到高排序。
代码:
#include<stdio.h>
struct
{
char name[12];
int score;
}arr[5000];
int n;
void swap(int *a,int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void qipaofa() //冒泡排序法
{
printf("选择1,升序,选择2,降序:");
int x;
scanf("%d",&x);getchar();
if(x == 1)
{
for(int i=1;i<n;i++)
{
for(int j=i;j<n;j++)
{
if(arr[j].score > arr[j+1].score) swap(&arr[j].score,&arr[j+1].score);
}
}
}
else if(x == 2 )
{
for(int i=1;i<n;i++)
{
for(int j=i;j<n;j++)
{
if(arr[j].score < arr[j+1].score) swap(&arr[j].score,&arr[j+1].score);
}
}
}
}
void zhijie() //直接选择法
{
printf("选择1,升序,选择2,降序:");
int x;
scanf("%d",&x);getchar();
if(x == 1)
{
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(arr[i].score > arr[j].score) swap(&arr[i].score,&arr[j].score);
}
}
}
else if(x == 2)
{
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(arr[i].score <arr[j].score) swap(&arr[i].score,&arr[j].score);
}
}
}
}
void zheban() //折半插入法
{
printf("选择1,升序,选择2,降序:");
int x;
scanf("%d",&x);getchar();
if(x==1)
{
int low = 1,high = 1,mid = 1;
for(int i=1;i<=n;i++)
{
int low = 1,high = i-1,x = arr[i].score;
arr[0] = arr[i];
if(x > arr[high].score)
low = i;
else
{
while(low < high)
{
mid = (low + high)/2;
if(x <= arr[mid].score ) high = mid;
else low = mid + 1;
}
}
printf("%d ",low);
for(int j =i-1;j>=low;j--)
arr[j+1] = arr[j];
arr[low] = arr[0];
}
}
else
{
int low = 1,high = 1,mid = 1;
for(int i=1;i<=n;i++)
{
int low = 1,high = i-1,x = arr[i].score;
arr[0] = arr[i];
if(x < arr[high].score)
low = i;
else
{
while(low < high)
{
mid = (low + high)/2;
if(x >= arr[mid].score ) high = mid;
else low = mid + 1;
}
}
printf("%d ",low);
for(int j =i-1;j>=low;j--)
arr[j+1] = arr[j];
arr[low] = arr[0];
}
}
printf("\n");
}
void print()
{
for(int i=1;i<=n;i++)
{
printf("%s %d\n",arr[i].name,arr[i].score);
}
}
int main()
{
printf("输入你要排序的人数:");
scanf("%d",&n);
getchar();
for(int i=1;i<=n;i++)
{
printf("请输入每个学生的姓名和数据结构的分数:");
scanf("%s %d",arr[i].name,&arr[i].score);
getchar();
}
//需要哪个便解开那个
//qipaofa();
//zhijie();
//zheban();
//print();
return 0;
}