C# · 12月 20, 2021

数据结构–冒泡排序和快速插入排序

题目:掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;了解各种方法的排序过程及其时间复杂度的分析方法。统计成绩:给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;(2)按名次列出每个学生的姓名与分数。

冒泡排序

#include

#include

#include

#include

#define MAXSIZE 4

struct student{

char name[8];

int score;

}stu[MAXSIZE];

int main()

{

int i,j,temp1,No=1;

char temp2[MAXSIZE];

printf(“请输入学生的姓名与分数:n”);

for(i=0;i<MAXSIZE;i++)

{

printf(“姓名:”);

scanf(“%s”,stu[i].name);

getchar();

printf(“成绩:”);

scanf(“%d”,&stu[i].score);

}

for(i=0;i<MAXSIZE;i++)

{

for(j=0;j<MAXSIZE-i;j++)

{

if(stu[j].score<stu[j+1].score)

{

temp1=stu[j].score;

stu[j].score=stu[j+1].score;

stu[j+1].score=temp1;

strcpy(temp2,stu[j].name);

strcpy(stu[j].name,stu[j+1].name);

strcpy(stu[j+1].name,temp2);

}

}

}

for(i=0;i<MAXSIZE;i++)

{

if(stu[i].score!=stu[i-1].score) No=i;

else No=No;

printf(“第%d名:%s的成绩为%dn”,No+1,stu[i].name,stu[i].score);

}

return 0;

}

快速插入:

#include

#include

#include

#define MAXSIZE 4

struct student{

char name[8];

int score;

}stu[MAXSIZE];

int main()

{

int i,key,No=1;

char temp[MAXSIZE];

printf(“请输入学生的姓名与分数:n”);

for(i=0;i<MAXSIZE;i++)

{

printf(“姓名:”);

scanf(“%s”,&stu[i].score);

}

for(i=1;i<MAXSIZE;i++)

{

if(stu[i].score>stu[i-1].score)

{

key=stu[i].score;

strcpy(temp,stu[i].name);

stu[i].score=stu[i-1].score;

strcpy(stu[i].name,stu[i-1].name);

for(j=i-2;key<stu[j].score;j–)

{

stu[j+1].score=stu[j].score;

strcpy(stu[j+1].name,stu[i].name);

}

stu[j+1].score=key;

strcpy(stu[j+1].name,temp);

}

}

for(i=0;i<MAXSIZE;i++)

{

if(stu[i].score!=stu[i-1].score) No=i;

else No=No;

printf(“第%d名:%s的成绩为%dn”,stu[i].score);

}

}