解题思路以及注意事项:
虽然本题有很多种解法,但小方发现这题用冒泡法更能有逼格,所以建议大家熟练运用这种方法。
一般用循环来输出数组里的内容,除了字符串可以不用循环来输出。
冒泡法就是将数存在数组里面像冒泡一样相互比较。
#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; } } }
看看大家还有没有什么不懂的,请在下方评论区留言,小方会在看到的第一时间替你解疑
0.0分
2 人评分
函数部分这样写更容易理解,以第一个循环变量为基准,用第二个循环变量遍历基准后的每个元素,有比基准小的元素会不断与基准交换值,直到找到最小的元素会成为最终代替基准那个元素。 #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; } } } }
喜欢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; }
为什么这个是错的????? #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; }
#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; }
#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; } //我这个哪里错了啊?
核弹头 2018-12-26 20:39:54 |
我把3个数的排序换成了6个数排序,以免数据太少容易出现偶然性。