C语言:下面程序使用选择排序方法对20个整数进行排序,这20个数从键盘输入,并输出排序前和排序后的数据

请问这个程序有什么问题。求解
#include<stdio.h>
void main()
{
int i,j,k,a[10],temp;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
printf("%d ",a[i]);
for(i=0;i<19;i++)
{
k=i;
for(j=i+1;j<20;j++)
if(a[j]<a[k])k=j;
if(k!=i);
{temp=a[i];a[i]=a[k];a[k]=temp;}
}
for(i=0;i<20;i++)
printf("%d ",a[i]);
}

#include<stdio.h>
 main()
{
int i,j,k,a[20],temp; //数组太小 
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
printf("%d ",a[i]);
printf("\n"); //需要换行 
for(i=0;i<19;i++)
{
k=i;
for(j=i+1;j<20;j++)
if(a[j]<a[k])k=j;
if(k!=i) //多了分号 
{temp=a[i];a[i]=a[k];a[k]=temp;}
}
for(i=0;i<20;i++)
printf("%d ",a[i]);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-12

你的代码我给你修改了,修改处我加备注了,你看看吧。

#include<stdio.h>
void main()
{
    int i,j,a[20],temp; //修改1:a下标应该是20不是10,越界了。  变量k是多余的删了
    for(i=0;i<20;i++)
    scanf("%d",&a[i]);
    
    for(i=0;i<20;i++)
    printf("%d ",a[i]);
    printf("\n");
    
    for(i=0;i<19;i++)
    {
        for(j=i+1;j<20;j++)//修改2: 交换直接放在这个子循环里,你之前没有放在J循环中
        {
            if(a[j]<a[i])
            {temp=a[i];a[i]=a[j];a[j]=temp;}
        }
    }
    for(i=0;i<20;i++)
        printf("%d ",a[i]);

}

第2个回答  2017-12-03
a[10]这里有问题,你要输入20个数,a就应该是a[20],而不是10。
第3个回答  2017-12-02
a[10]改成a[20],只定义了10个数,怎么存放20个数
第4个回答  推荐于2017-12-16
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXlen 20
void select_sort(int *x, int n) { //选择排序
int i, j, min;
int t;
for (i = 0; i < n - 1; i++) { // 要选择的次数:0~n-2共n-1次
min = i; // 假设当前下标为i的数最小,比较后再调整
for (j = i + 1; j < n; j++) { //循环找出最小的数的下标是哪个
if (*(x + j) < *(x + min)) {
min = j; // 如果后面的数比前面的小,则记下它的下标
}
}
if (min != i) { // 如果min在循环中改变了,就需要交换数据
t = *(x + i);
*(x + i) = *(x + min);
*(x + min) = t;
}
}
}
int main() {
int i;
int iArr[MAXlen];
srand((unsigned int)time(NULL));
printf("\n排序前:\n");
for(i = 0 ; i < MAXlen ; i++) {
iArr[i] = (unsigned int)rand() % 1000;
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n");
select_sort(iArr,MAXlen);
printf("\n排序后:\n");
for(i = 0 ; i < MAXlen ; i++) {
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n\n");
return 0;
}本回答被网友采纳

C语言:下面程序使用选择排序方法对20个整数进行排序,这20个数从键盘输 ...
void select_sort(int *x, int n) { \/\/选择排序int i, j, min;int t;for (i = 0; i < n - 1; i++) { \/\/ 要选择的次数:0~n-2共n-1次 min = i; \/\/ 假设当前下标为i的数最小,比较后再调整 for (j = i + 1; j < n; j++) { \/\/循环找出最小的数的下标是哪个if (*(x ...

使用C语言用简单选择法对20个整数排序
include<stdio.h> int main(int argc, const char *argv[]){ int a[5] = {5,18,3,123,1,8,9,6,0,120};int i,j,min,index,t;for(i = 0;i < 9;i ++){ min = a[i];\/\/ index = i;for(j = i + 1;j < 10;j ++){ if(min > a[j]){ min = a[j];index =...

c语言中输入20个数排列大小顺序
代码如下:int a[20]; int i,j,t; printf("请输入20个数字,以回车间隔:"); for(i=0;i<20;i++) scanf("%d",&a[i]); printf("\\n"); for(j=0;j<20;j++) for(i=0;i<20-j;i++) if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1...

C语言问题 编程实现从键盘输入20个整数,统计其中正整数的个数,并计算...
{ int a[20],sum=0,count=0;printf("请输入20个整数\\n");for (int i=0;i<20;i++){ scanf("%d",&a[i]);if(a[i]>0){ sum=sum+a[i];count++;} } printf("正整数的和为%d\\n正整数的个数为%d\\n",sum,count);}

C语言:生成20个随机数,然后把它们排序,最后要把排序前和排序后的数都...
\/*选择法,从小到大排序*\/ for (i=1;i<=20;i++){ index=i; \/*从i到20这几个元素中最小值的序号*\/ for (j=i+1;j<=20;j++)if (nums[index]>nums[j])index=j;if (index!=i)\/*交换i和index的元素的值*\/ { temp=nums[index];nums[index]=nums[i];nums[i]=temp;} } ...

c语言。使用冒泡法,对输入的20个整数从小到大进行排序。20个整数用s...
main(){ int i,j,w[20];printf("请分别输入20个学生的成绩");for(i=0;i<20;i++) scanf("%d",&w[i]);for (i=0;i<20;i++)for (j=i;j<20;j++)if (w[i]>w[j]){int temp=w[j]; w[j]=w[i]; w[i]=temp; } for(i=0;i<20;i++) printf("%d ",w[i]...

C语言编程 定义一个有20个元素的整型数组,从键盘输入20个数,输出 该数...
<stdio.h> int main(int argc, char *argv[]){ int a[20] = {0}; int i = 0; for (i = 0; i < 20; i++) { printf("输入第%d个数:\\n", i+1); scanf("%d", &a[i]); } for (i = 0; i < 20; i++) { if (0 == a[i]...

C语言,提示输入20个整数,统计相同的数字出现的次数,并打印出来,按数字...
用结构体存储数值,及个数。插入排序,相同则累加。include <stdio.h>typedef struct { int v; int t;}number;int main(){ number n[20]; int cnt=0; int i,j,k,a; for(i = 0; i <20; i ++) { scanf("%d",&a); for(j = cnt-1; j>=0; j ...

用选择法,对输入的20个数从大到小排序
void main(){int a[20],i,j,k,t;for(i=0;i<20;i++)scanf("%d",&a[i]);for(i=0;i<19;i++){ k=i;for(j=i+1;j<20;j++)if(a[j]<a[k])k=j;t=a[i];a[i]=a[k];a[k]=t;} for(i=0;i<20;i++)printf("%d ",a[i]);printf("\\n");system("pause")...

用C语言实现输入20个数偶数项按升序输出,奇数项不变,
int main(){ int arr[20] = {1,4,2,3,8,7,6,5,9,10,20,19,18,17,16,15,14,13,12,11};int tmp, i, j;for(i=0; i<20; i+=2) \/\/i+=2即可。。同样如果认为a[1]是偶数项的话从a[0]开始 for(j=i; j<20; j+=2)if(arr[i]>arr[j])tmp =arr[i], arr[i...

相似回答