到目前为止,我有这个代码,但问题是在用户输入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
答案 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)