C语言一维数组排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");

参考技术A 今天为嘛总是见到最后这句话……
初学者……冒泡呗,两个数据都冒。两个for循环,两趟比较,每趟把最大的放最前面(或者最小的放最后面,我感觉都一样)交换的时候,把两个都同时交换了就好……
参考技术B

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

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那个地方就是报错的

本回答被提问者采纳

c程序输入10个数到一维数组中,按升序排序后输出。

用三个函数实现数据的输入排序和输出

参考技术A #include
<stdio.h>
#define
NUMBER
10
void
sort(int
*num)

int
i,
j;
for(i=0;
i<NUMBER-1;
i++)

for(j=i;
j<NUMBER;
j++)

if(num[i]
>
num[j])

int
t
=
num[i];
num[i]
=
num[j];
num[j]
=
t;




void
input(int
*num)

int
i;
printf("input
%d
number
:
",
NUMBER);
for(i=0;
i<NUMBER;
i++)
scanf("%d",
&num[i]);

void
output(int
*num)

int
i;
for(i=0;
i<NUMBER;
i++)
printf("%d
",
num[i]);
putchar('\n');

int
main()

int
num[NUMBER];
input(num);
sort(num);
output(num);
return
0;
参考技术B 提供一个冒泡算法
int sort_array(int array[],int array_len)

int i,j,ii,tmp;

j = array_len;
if(j == 0)

return 0;


/*sort*/
for(i=0; i < j; i++)

for(ii=i+1;ii < j; ii++)

if(array[i] > array[ii])

tmp = array[i];
array[i] = array[ii];
array[ii] = tmp;




return j;
参考技术C //演示输入N个数,并按大小顺序输出
#include<stdio.h>
#define N 10
float increase(float *array,unsigned char n);//申明使数组递增函数
void main()

unsigned char i,quit;
float number[N];
printf("请输入%d个数据,每个数输入后以回车键结束。",N);
again: for(i=0;i<N;i++)

printf("\n请输入第%d个数:",i+1);
scanf("%f",&number[i]);

increase(number,N);
printf("\n您输入的数据按从大到小顺序输出如下:");
for(i=0;i<N;i++)

printf("\n %10.2f",number[i]);//保留两位小数输出最大数

printf("\n继续测试请按Y或y,退出请按其它任意键。\n");
quit=getch();
if(quit=='y'||quit=='Y') goto again;
getch();


//方法1用指针实现 冒泡排序法(大数由底部往上冒)
/*
float increase(float *array,unsigned char n)

unsigned char i,j;
float temp,*ip;
for(i=0;i<n-1;i++)//注意i的结束条件要写对

for(j=n-1;j>i;j--)//注意j的结束条件要写对

ip=array;
if(*(ip+j)>*(ip+(j-1) ))

temp=*(ip+j);
*(ip+j)=*(ip+(j-1) );
*(ip+(j-1))=temp;




*/
//方法2用指针实现 快速排序法
float increase(float *array,unsigned char n)

unsigned char i,j,k;
float temp,*ip;
for(i=0;i<n-1;i++)//注意i的结束条件要写对

k=i;
for(j=i+1;j<n;j++)//注意j的结束条件要写对

ip=array;
if(*(ip+k)<*(ip+j))

k=j;//记住最大数的下标(位置)



ip=array;
temp=*(ip+k);
*(ip+k)=*(ip+i);
*(ip+i)=temp;


参考技术D 真晕。

作业党啊
第5个回答  2010-01-15 #include <stdio.h>

#define NUMBER 10

void sort(int *num)

int i, j;
for(i=0; i<NUMBER-1; i++)
for(j=i; j<NUMBER; j++)
if(num[i] > num[j])
int t = num[i];
num[i] = num[j];
num[j] = t;





void input(int *num)

int i;
printf("input %d number : ", NUMBER);
for(i=0; i<NUMBER; i++)
scanf("%d", &num[i]);


void output(int *num)

int i;
for(i=0; i<NUMBER; i++)
printf("%d ", num[i]);
putchar('\n');


int main()

int num[NUMBER];

input(num);
sort(num);
output(num);

return 0;

以上是关于C语言一维数组排序的主要内容,如果未能解决你的问题,请参考以下文章

c语言编程 一维数组和函数

c程序输入10个数到一维数组中,按升序排序后输出。

用C语言实现一维数组中删除第N个元素的程序怎么写

C语言编写一个排序函数(对一维数组排序)并在主函数中调用

C语言,在一维数组中存入10个整数并排序,其中数据的输入,排序和输出功能自定义函数实现

C语言一维数组冒泡排序