升序和降序

时间:2012-03-06 04:42:10

标签: 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

3 个答案:

答案 0 :(得分:0)

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

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

如果你想要它们以数字方式而不是位置方式进行排序,你需要查看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

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

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

答案 1 :(得分:0)

没有任何机制可以对数字进行排序,只是将数字显示为用户输入,或者按相反顺序显示

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
    }

尝试以下代码

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int array[] = { 90, 3, 33, 28, 80, 49, 8, 30, 36, 25 };
int sort(const void *x, const void *y) {
  return (*(int*)x - *(int*)y);
}
void main() {
  clrscr();
  int i;
  qsort(array, 10, sizeof(int), sort);
  for (i=0; i<10; i++) {
  printf("%d ", array[i]);
  }
  getch();
}

答案 2 :(得分:0)

尝试学习冒泡排序方法对数组进行排序。看看这个example

通过示例简单理解排序的工作原理......

很好:)