PTA---冒泡排序

202321332111陈尚稳 软件23 2023-11-06 21:17:31

本题目要求读入N个整数,采用冒泡排序(上升法,即每轮得到一个最小值)进行排序,输出前3轮排序后的结果。

输入格式:

输入不超过100的正整数N和N个整数(空格分隔)。

输出格式:

输出三行,第一行为第一轮排序结果,第二行为第二轮排序结果,第三行为第三轮排序结果。数据间用一个空格分隔。

为简便起见,最后一个元素后也有一个空格。

输入样例:

5
2 5 4 1 3

输出样例:

1 2 5 4 3 
1 2 3 5 4 
1 2 3 4 5 

冒泡排序,是一种计算机科学领域的较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

根据输出样例 ,可以得知该排序由后向前进行排序

则可将数组从最后一个数开始往前进行比较,如果较小,则与前一个数进行交换

以此类推直到第二个数和第一个数比较完成

for(int i=n;i>=2;i--){
    if(list[i]<list[i-1])

{
    ex=list[i];
    list[i]=list[i-1];
    list[i-1]=ex;
    }

}

for(int i=1;i<=n;i++)
    {

printf("%d ",list[i]);

}

这样我们就得到了一轮的排序结果

题目要求输出三轮的排序结果

则可设置变量 cnt(count)用于计数

每输出一轮排序结果计一次数

直到cnt等于三时跳出循环

#include<stdio.h>
int main(){
    int n;
    int list[100];
    int cnt=0;
    int ex;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
{
        scanf("%d",&list[i]);
    }
    for(int j=1;j<n;j++)
{
    for(int i=n;i>=2;i--)
{
    if(list[i]<list[i-1])
{
    ex=list[i];
    list[i]=list[i-1];
    list[i-1]=ex;
    }
}
    for(int i=1;i<=n;i++)
    {
printf("%d ",list[i]);
}
        cnt++;
    if(cnt==3)
        break;
        printf("\n");
        }
return 0;}

这样我们就得到要排序数组的前三种排序

...全文
45 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
张老师 11-16
  • 打赏
  • 举报
回复

讨论一个排序算法,还可以分析一下其特点、不足和改进。

180

社区成员

发帖
与我相关
我的任务
社区描述
程序设计基础课程教学群
c语言c++ 高校 福建省·厦门市
社区管理员
  • xmzq001
  • jiangxiaoju
  • 星落化尘
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

请加入学习社区的软件23级同学修改社区昵称为学号+姓名,以便登记作业提交情况。

试试用AI创作助手写篇文章吧