C语言--怎样实现输入任意几个数排序

2025-03-22 06:13:44
推荐回答(5个)
回答1:

把循环次数改成你想要的数就可以了。

比如上面你的程序,for语句中的i<=9,这个9改成你想要的次数。另一种方法,这个次数也作为一个变量从键盘输入,这样适应性相对来说好一些,不用每次都编译程序。

提醒,如果是大批量的输入数据,用键盘逐个输入数据是比较低效和低准确率的方法,通常采用数据文件(比如一个文本文件)的方式。

你能问出这个问题来,说明你对上面的代码还没有理解透彻,好好学习吧。
----------------------------------------------------
对于lz的补充的回答:
我前面说的:另一种方法,这个次数也作为一个变量从键盘输入,这样适应性相对来说好一些,不用每次都编译程序。

但是有一个问题,就是C不支持动态定义数组。解决方法两种:一、定义一个足够大的数组(但有越界的可能,程序里要做判断和控制)。二、使用动态内存分配,可以从根本上解决此问题。

还有一种折中的办法,就是对排序数定义一个宏,程序中的循环都使用这个宏来控制循环,如果排序数量更改了,虽然需要重新编译程序,但是也很好修改,只要改这个宏的数值就可以了。

回答2:

关于排序的方法有很多种,例如:冒泡排序、选择排序、插入排序、归并排序等等。

下面以冒牌排序来实现任意几个数的排序:

#include 

//冒泡排序,由低到高
int main()
{
    
    int a[10] = {2,5,9,15,1,6,4,8,26,33};
    int temp;
    int i, j;

    for (i = 1; i < 10; i++)
    {
        for (j = 0; j < 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 ", a[i]);
    }
    printf("\n");
}

运行结果为:1 2 4 5 6 8 9 15 26 33

冒泡排序法是相邻之间的数据进行比较,每经过一次j循环,就将符合条件的待排数据进行一次移动互换,直到第n-1次移动互换,将整个数据排列完成。以下为j循环后的结果:

初始:2,5,9,15,1,6,4,8,26,33

第1次: 2,5,9,1,6,4,8,15,26,33

第2次: 2,5,1,6,4,8,9,15,26,33

第3次: 2,1,5,4,6,8,9,15,26,33

第4次: 1,2,4,5,6,8,9,15,26,33

第5次: 1,2,4,5,6,8,9,15,26,33

第6次: 1,2,4,5,6,8,9,15,26,33

第7次: 1,2,4,5,6,8,9,15,26,33

第8次: 1,2,4,5,6,8,9,15,26,33

第9次: 1,2,4,5,6,8,9,15,26,33

注意最小的数据的移动。

回答3:

如果你会用指针的话,你可以创建一个动态链表,每次输入时做排序,这样就建成了一个有序的链表,你输出时就会是顺序的了。如果你想从小到大和从大到小都能输出,就建两个指针域,一个存前一地址,一个存下一地址。

回答4:

楼主的思路是对的。不能直接对数组用动态定义,但是可以对指针使用。所以动态定义一个指针,把它当成数组用。我把你的程序做了些简单的修改,运行成功。
源程序如下:
#include
#include
main()
{
float *a;
int i,j,length;
printf("请输入要排序数字的个数:\n");
scanf("%d",&length);
a=(float *)malloc(length*sizeof(float));
printf("请输入%d个数(数字之间用空格或回车隔开):\n",length);
for(i=0;i{
scanf("%f",&a[i]);
}
for(i=0;i for(j=0;j if(a[j]>a[j+1])
{a[j]=a[j]+a[j+1];a[j+1]=a[j]-a[j+1];a[j]=a[j]-a[j+1];}
printf("这%d个数从小到大排列的顺序是:\n",length);
for(i=0;iprintf("%-7.2f\n",a[i]);
}

回答5:

这就涉及到函数的调用,你把第一个函数的作用为实现多个数据的输入,第二个函数实现冒泡排序,这样就可以了.
主要是参数不同而已,