198
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
本题目要求读入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;}
这样我们就得到要排序数组的前三种排序
讨论一个排序算法,还可以分析一下其特点、不足和改进。