c - 升序和降序

标签 c arrays

到目前为止我有这段代码,但问题是用户输入 10 个数字后,它不会按升序或降序对数字进行排序

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>

    int main() 
   { 

   //variable declaration 
    int  iNumbers[10];
    int  iEntry=0;
    int  x=0;

    printf("Enter 10 numbers\n");


    for (x=0; x < 10; x++) {
        scanf("%d", &iNumbers[x]); //user for loop to scan every value in the array


    }

    printf("\n\nWhich order would you like to see your numbers?");
    printf("\n1)\tAscending\n");
    printf("\n2)\tDescending\n");
    scanf("%d", &iEntry); 

    switch(iEntry)  {
        case 1:
          printf("\n\n%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n\n",iNumbers[0],iNumbers[1],iNumbers[2]  ,iNumbers[3],iNumbers[4],iNumbers[5],iNumbers[6],iNumbers[7],iNumbers[8],iNumbers[9]);
        break; //prints all the numbers in the array in ascending order

        case 2:
           printf("\n\n%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n\n",iNumbers[9],iNumbers[8],iNumbers[7],iNumbers[6],iNumbers[5],iNumbers[4],iNumbers[3],iNumbers[2],iNumbers[1],iNumbers[0]);
        break; //prints all the numbers in the array in descending order
        }

        system("pause"); //pauses system
        return 0;
} //end of main function

最佳答案

不,它不会对数字进行排序,因为您还没有编写执行此操作的代码!

以正向或反向顺序打印它们的代码是可以的,但它完全基于您输入数字的顺序。

如果您希望它们按数字而不是位置排序,您需要查看 qsort函数(如果您只想对其进行排序),或者如果您需要自己编写代码(例如家庭作业),则通常会研究排序算法。

对于后者的示例,您可以使用下面非常简单的伪代码。这是一种冒泡排序,因此不太适合严肃使用,但对于小型数据集和/或家庭作业来说绰绰有余:

for i = 1 to length:
    for j = 1 to length -1:
        if array[j] > array[j+1]:
            temp = array[j]
            array[j] = array[j+1]
            array[j+1] = temp

如果,正如您在评论中提到的,您不能使用冒泡排序,您应该在谷歌上搜索 one of the other sort algorithms并将其编码。

但我会尽量坚持那些简单易懂的内容。冒泡排序的下一步可能是选择排序,伪代码如下:

for i = 1 to length-1:
    minidx = i
    for j = i+1 to length:
        if array[j] < array[minidx]:
            minidx = j
    if minidx != i:
        temp = array[i]
        array[i] = array[minidx]
        array[minidx] = temp

这样做的好处是每次主要通过只交换一次而不是(可能)多次。它进行次要传递只是为了找到应该将哪个索引放置在给定位置然后进行交换。

您的两种情况(升序和降序)之间的唯一区别是使用 >而不是 <在比较函数中。

关于c - 升序和降序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9578008/

相关文章:

c - AVR ATmega2560 上 vsnprintf 的奇怪行为

c - Windows 中的多线程 - 创建函数指针数组时出错

编译单独的内核模块 (Debian/Ubuntu)

c - "-->"在 C 中是什么意思?

javascript - Codewars的"Steps in Primes"

c - 如何将字符串传递给C中的函数

java - 在数组中正确使用协方差

c - 文件指针导致核心转储。可能是一些愚蠢的事情

javascript - 我的递归函数哪里出错了?

c - 如何在一个循环中声明多个不同大小的数组?