首先说明一下冒泡法的大致概念,以排序结果从大到小为例:将用户输入的数值直接存入一个数组,排序数全部输入完成后开始排序,从数组的最后一个元素开始,每个元素都与跟它相邻的前一个元素作比较,如果元素值比前一个要大,就交换这两个元素的值。一轮交换下来,数组中最大的元素值就会被排到最前面,一直重复这样的交换,直到所有元素排完。设置标志位,如果本轮下来没有元素进行过交换,就是已经按照顺序排好序了,直接输出。下面贴一下自己的程序,欢迎各路高手吐糟指点
/*********冒泡排序法************/
#include<stdio.h>
void sort(void)
{
int a;
int i,i1,j,l,k=1,class[i];
printf("请输入班级学生总数:");
scanf("%d",&i1);
printf("\n请依次输入学生成绩,按回车键确认输入:");
for(i=0;i<i1;i++)
{
printf("\n");
scanf("%d",&class[i]);
}
for(l=0;l<i1;l++)//l的值就是最新排出来的元素编号
{
for(i=i1;i>l;i--)//编号l及之前元素已经完成排序,新的一轮循环会对排在编号l之后的元素进行排序
{
if (class[i]>class[i-1])//比较两个相邻元素
{
k=0;
j=class[i-1];
class[i-1]=class[i];
class[i]=j;
i=i1;
}
}
if(k==1)//如果这一轮循环下来发现后面的全部都是正确顺序,就终止排序
break;
}
printf("该班级学生成绩排名为:");
for(i=0;i<i1;i++)
{
printf("%d ",class[i]);
}
}
void main()
{
int choose;
while(1)
{
sort();
printf("继续对下一个班级进行排序请按1,退出运行请按2\n");
scanf("%d",&choose);
if(choose==1);
else if(choose==2)
break;
else
{
printf("您进行了错误的操作!默认选择退出\n");
break;
}
}
}
|