到目前为止我有这段代码,但问题是用户输入 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/