C语言一维数组排序

Description

对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下:

int sort(int a[], int n);

数组元素的输出调用PrintArr()。

Input

第一行输入一个整数n(1<=n<=10),表示数组有n个整数;第二行输入n个整数。

Output

输出占一行。对这n个整数数按照从小到大的顺序输出,数据之间用一个空格隔开。

Sample Input

6
6 5 1 2 3 4

Sample Output

1 2 3 4 5 6
格式错了 看不出来.................................
#include<stdio.h>
int sort(int a[], int n);
void PrintArr(int a[], int n);
int main()
{
int i,n;
scanf("%d",&n);
int a[n];
for(i=0 ; i<n ; i++)
scanf("%d",&a[i]);
sort(a,n);
PrintArr(a,n);
return 0;
}
int sort(int a[], int n)
{
int i,j,temp;
for(i=0 ; i<n-1 ; i++)
{
for(j=i+1 ; j<n ; j++)
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
return 0;
}
void PrintArr(int a[], int n)
{
int m;
for(m=0 ; m<n ; m++)
printf("%d ",a[m]);
printf("\n");
}

第1个回答  2020-01-05
今天为嘛总是见到最后这句话……
初学者……冒泡呗,两个数据都冒。两个for循环,两趟比较,每趟把最大的放最前面(或者最小的放最后面,我感觉都一样)交换的时候,把两个都同时交换了就好……
第2个回答  2015-11-12

应该是因为输出的时候最后一个数字之后不需要空格,输出函数改为如下:

void PrintArr(int a[], int n)
{
    int m;
    printf("%d", a[0]);
    for(m=1 ; m<n ; m++)
        printf(" %d",a[m]);
    printf("\n");
}

 另外数组的定义大小不能为变量,将int a[n];改为int a[20];

追问

之前的题目要求过,但这个好像没说吧

追答

有说数据之间用一个空格隔开,没有说最后的位置是数据之间

追问

数组的定义大小不能为变量,但为什么能运行对 啊,是因为我没一直没有改变n的值吗?

追答

那应该是与你的编译器有关系,正规的都是不能直接使用变量大小的,一般C++中也是用new关键字动态创建的。

追问

用的是codeblock

追答

我用vs2013那个地方就是报错的

本回答被提问者采纳
相似回答