首先,需要强调一点,排序的方式有很多种,而我写的这一种应该是最容易理解的,比较适合初学者来看,但是实现排序相对占用
空间比较多,不是一种很好的排序方式。
这种方式使用的是一维数组的方式,首先是将申请的空间初始化,然后将输入的数分别放到对应序号的一维数组中,利用一维数组
来计数,然后利用一维数组的将数打印出来。
比如:随机选择0到9范围内的5个数,从小到大排序,输入1、6、3、5、3,会输出1、3、3、5、6
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[10],i,j;
for(i=0;i<10;i++)
{
a[i]=0; //初始化
}
for(i=0;i<5;i++)
{
scanf("%d",&j); //输入
a[j]=a[j]+1; //计数
}
for(i=0;i<10;i++) /*如果需要逆序只需要改为for(i=9;i>=0;i--)即可*/
{
for(j=1;j<=a[i];j++)
{ printf("%d",i);} //打印输出
}
}
结果如图:
如果想要逆序输出又如何呢?
只需修改一个for循环即可,如代码中标记修改。
但是如果想要更加复杂一点数的排序呢?
例如:0到1000之间n个数的排序,如何实现呢?(注意:0到1000有1001个数,在定义的时候需要注意)
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[1001],i,j,n; //注意:0到1000有1001个数,在定义的时候需要注意
for(i=0;i<=1000;i++)
{
a[i]=0;
}
printf("请输入排序数字的个数:\n");
scanf("%d",&n);
printf("请输入需要排序的数字:\n");
for(i=0;i<n;i++)
{
scanf("%d",&j);
a[j]=a[j]+1;
}
printf("排序结果为:\n");
for(i=0;i<=1000;i++)
{
for(j=1;j<=a[i];j++)
{ printf("%d\n",i);}
}
}