解题思路注意事项:
给十个数进行排序,我们用到的是冒泡法,每次将最大的一个数放到最后,由于前九次已经把后面的序列排好,所以一共只需要进行九次即可;
同时在进行第i次排序的时候因为最后i个数是已经比较过的,所以在一次排序中需要比较的次数为10-i。
参考代码:
#include<stdio.h> int main() { int a[10],i,j,temp; for(i=0; i<10; i++){ scanf("%d",&a[i]); } for(i=0; i<9; i++){ for(j=0; j<10-i; j++){ if(a[j] > a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for(i=0; i<10; i++){ printf("%d\n",a[i]); } return 0; }
0.0分
145 人评分
#include<stdio.h> int main() { int b[10] = { 4,85,3,234 ,45,345,345,122,30,12 },t=0; for (int i = 0; i < 9; i++) { for (int n = 0, m = i; n < 9 - i; n++,m++) { if (b[i] > b[m + 1]) { t = b[i]; b[i] = b[m+1]; b[m + 1] = t; } } } for(int i=0;i<=9;i++) printf("%d\n",b[i]); return 0; } 我的为什么错误50%?求解
稍微修改一下 #include <stdio.h> int main() { int a[10],i,j,k; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(j=0;j<10;j++) { for(i=j+1;i<10;i++) { if(a[j]>a[i]) { k=a[j]; a[j]=a[i]; a[i]=k; } } } for(i=0;i<10;i++) { printf("%d\n",a[i]); } return 0; }
纯洁的宇仔 2020-01-13 11:51:34 |
这不是交换排序么,题目说的是用选择排序做的。
那个与j<10-i这个条件有啥用啊?我不太懂求解答
我写了一个用选择排序的方法,虽然在网页上编译通过了,但是在vc6.0上编译会出错,比如输入1 2 3 4 5 6 7 8 9 10,会输出1 2 3 4 5 6 7 8 9 11,但是用题目中的输入就对了,自己debug也查不出,问问是哪里有问题。 #include<stdio.h> int main(void) {int i,j,p; int a[9]; int temp; for(p=0;p<10;p++) {scanf("%d",&a[p]);} for(i=0;i<10;i++) {for(j=i;j<9;j++) {if(a[i]>a[j+1]) {temp=a[i]; a[i]=a[j+1]; a[j+1]=temp;};};} for(i=0;i<10;i++) {printf("%d\n",a[i]);} return 0;}
一位热心的老大爷 2019-12-06 15:09:16 |
int a[9];这个错误太显眼了,改成10
#include<stdio.h> void main(void) { int size=10; int temp; int pos; int num[]={4,85,3,234,45,345,345,122,30,12}; for(int i=0;i<size-1;i++) { pos=i; for(int j=i+1;j<size;j++) { if(num[pos]>num[j]) //注意此处要用num[pos]来和num[j]比较 { pos=j; } } if(pos!=i) { temp=num[i]; num[i]=num[pos]; num[pos]=temp; } } for(int k=0;k<10;k++) { printf("%d\n",num[k]); } } 用的标准选择排序,为啥我的结果对了说我答案错误50%??
小白 2020-02-05 22:16:28 |
我把你的代码改了一下,你看一下#include<stdio.h> int main() { int b[10],t=0; for(int i = 0;i < 10;i++) { scanf("%d",&b[i]); } for (i = 0; i < 9; i++) { for (int n = 0, m = i; n < 9 - i; n++,m++) { if (b[i] > b[m + 1]) { t = b[i]; b[i] = b[m+1]; b[m + 1] = t; } } } for(int i = 0;i < 10;i++) printf("%d ",b[i]); return 0; }
小白 2020-02-05 22:25:41 |
你们的代码的都是一行行的,为啥我的连在一起的?
吼鲸王w 2020-02-06 12:01:00 |
测试数据不一定是题目那个
后来呢 2020-02-18 16:11:07 |
错误%50的原因是你直接把数组赋值,必须先定义一个数组,然后数字由键盘输入,for(i=0;i<10;i++) { scanf("%d",&a[i]); }
后来呢 2020-02-18 16:11:58 |
不要被题目所说的“输入无”误导了,我一开始也是错误%50