查看: 2464|回复: 0
打印 上一主题 下一主题

九种基本的数值排序算法之一:冒泡排序

[复制链接]
跳转到指定楼层
沙发
发表于 2018-3-21 16:04:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     首先说明一下冒泡法的大致概念,以排序结果从大到小为例:将用户输入的数值直接存入一个数组,排序数全部输入完成后开始排序,从数组的最后一个元素开始,每个元素都与跟它相邻的前一个元素作比较,如果元素值比前一个要大,就交换这两个元素的值。一轮交换下来,数组中最大的元素值就会被排到最前面,一直重复这样的交换,直到所有元素排完。设置标志位,如果本轮下来没有元素进行过交换,就是已经按照顺序排好序了,直接输出。下面贴一下自己的程序,欢迎各路高手吐糟指点
/*********冒泡排序法************/
#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;
                        }
                       
                }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表