解题思路以及注意事项:

  1. 虽然本题有很多种解法,但小方发现这题用冒泡法更能有逼格,所以建议大家熟练运用这种方法。

  2. 一般用循环来输出数组里的内容,除了字符串可以不用循环来输出。

  3. 冒泡法就是将数存在数组里面像冒泡一样相互比较。

#include<stdio.h>
void list(int a[],int n);//简易冒泡法
int main()
{
    int a[3],i;
    for(i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
    }
    list(a,3);
    for(i=0;i<3;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
void list(int a[],int n)
{
    int i,j,trans;
    for(i=0;i<n;i++)                                   //冒泡法,我建议大家可以死记,理解后记起来跟容易
        for(j=0;j<n-1;j++)
        {
            if(a[j]>a[j+1])
            {
                trans=a[j];
                a[j]=a[j+1];
                a[j+1]=trans;
            }
        }
}

看看大家还有没有什么不懂的,请在下方评论区留言,小方会在看到的第一时间替你解疑

点赞(11)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 12 条评论

汤旭辉 5年前 回复TA
@酷酷长 3,2,1
核弹头 6年前 回复TA
@核弹头 我把3个数的排序换成了6个数排序,以免数据太少容易出现偶然性。
核弹头 6年前 回复TA
函数部分这样写更容易理解,以第一个循环变量为基准,用第二个循环变量遍历基准后的每个元素,有比基准小的元素会不断与基准交换值,直到找到最小的元素会成为最终代替基准那个元素。
#include<stdio.h>
void list(int a[],int n);
int main()
{
    int a[6],i;
    for(i=0;i<6;i++)
    {
        scanf("%d",&a[i]);
    }
    list(a,6);
    for(i=0;i<6;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
void list(int a[],int n)
{
    int i,j,trans;
    for(i=0;i<n-1;i++)
    {             
        for(j=i+1;j<n;j++)
        {
            if(a[j]<a[i])
            {
                trans=a[i];
                a[i]=a[j];
                a[j]=trans;
            }
    	}
    }
}
核弹头 6年前 回复TA
@酷酷长 你这只能逐步走直线两个相邻的元素相互判断交换位置,判断受到限制,如果a[0]不大于a[1],a[1]不大于a[2]就直接结束了。没有判断a[0]和a[2]的大小,相当于只判断了a[0]与a[1]的大小和a[1]与a[2]的大小。你应该定义两次循环一个循环变量作为基准,另一个循环变量遍历基准之后的每个元素与基准进行比较。
cpython3 6年前 回复TA
喜欢C++的大佬可以参考下哈。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
	int a;  
	vector<int> vec; 
	for(int i=0;i<3; i++)
	{
		cin>>a;
		vec.push_back(a);
	}
	sort(vec.begin(),vec.end());
	for(int i=0; i<3; i++)
	{
		cout<<vec[i]<<" ";
	}
	return 0;
}
酷酷长 6年前 回复TA
为什么这个是错的?????
#include <stdio.h>
int main()
{
int a[3];
int i,n;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
for(i=0;i<2;i++)
{
if(a[i]>a[i+1])
{
n=a[i];
a[i]=a[i+1];
a[i+1]=n;
}
}
for(i=0;i<3;i++)
printf("%d  ",a[i]);

return 0;
}
MrShuai 6年前 回复TA
#include <stdio.h>
int main()
{
	int a[3],i,j,c;
	for(i=0;i<3;i++)
	{
		scanf("%d",&a[i]);
	}
	for(j=0;j<3;j++)
	{
		for(i=0;i<3;i++)
		{
				if(a[i]>a[i+1])
		{
			c=a[i];
			a[i]=a[i+1];
			a[i+1]=c;
		}
		}
	}
	for(i=0;i<3;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
	
}
阿鹏 6年前 回复TA
@月夜魂 没错
阿鹏 6年前 回复TA
@月夜魂 j<2-i
月夜魂 6年前 回复TA
#include<stdio.h>
int main()
{
	int a[3],i,j,t;
	for(i=0;i<3;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<3;i++)
	{
		for(j=0;j<3-i;j++)
		{
			if(a[j]>a[j+1])
			{
				t=a[j];
			    a[j]=a[j+1];
			    a[j+1]=t;
			}
		}
	}
	for(i=0;i<3;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}
//我这个哪里错了啊?