错误导致排序数组

时间:2016-10-23 09:16:21

标签: c# arrays sorting

我正在练习C#并编写下面的代码,不包括以“int main() { unsigned int i=0, n; scanf("%d", &n); int **array=malloc(2*sizeof(int*)); for(;i<2;i++) *(array+i)=malloc(n*sizeof(int)); for(i=0;i<n;i++){/*Takes input via scanf*/ /* Calculate and store the result in **(array+i), *(*(array+i)+1))*/ } for(i=0;i<n;i++) printf("%d %d\n", **(array+i), *(*(array+i)+1)); /*Prints the outputs. This is where the runtime error happens*/ return EXIT_SUCCESS; } ....”开头的行。输出如预期的那样(即“5,7,2”)。

当我包括“Array.Sort ...”这一行时,我期望得到“2,5,7”,但输出“5,5,7”,即2号已经消失了以某种方式取代了5。任何人都可以帮助解释为什么(对初学者)?

Array.Sort

5 个答案:

答案 0 :(得分:3)

您不需要for循环来排序。只需Array.Sort即可对您的数组进行排序:

int[] numbers = new int[3] { 5, 7, 2 };
Array.Sort(numbers);

对数组进行排序后,可以打印排序后的数组:

for (int i = 0; i< numbers.Length; i++) {
    Console.Write(numbers[i] + " , ");
}

答案 1 :(得分:1)

您在循环中排序,之前写入i值。所以你的代码就像这样

  • 写第一项(5)
  • 对数组进行排序
  • 写下第二项(现在为5)
  • 对数组进行排序
  • 写第三项(现在为7)

您可能想要对数组进行排序,然后将其写出来:

int[] numbers = new int[3] { 5, 7, 2 };

Array.Sort(numbers);

for (int i = 0; i< numbers.Length; i++)
{
    Console.Write(numbers[i] + " , ");
}

顺便说一下,你也可以使用string.Join并避免循环(和逗号尾随):

var commaSeparatedNums = string.Join(", ", numbers);
Console.Write(commaSeparatedNums);

答案 2 :(得分:0)

您正在循环中对数组进行排序。排序仅在第一次应用时更改数组;排序的第二次和第三次调用不会对数组进行任何更改。

第一次打印输出发生在未排序的数组上;第二个打印输出发生在排序的数组上。第一次5是初始数字;第二次,5位于中间。这就是为什么你看到5打印两次。

为了解决这个问题,您需要在进入打印循环之前对数组进行一次排序:

Array.Sort(numbers);
for (int i = 0; i< numbers.Length; i++) {
    Console.Write(numbers[i] + " , ");
}

答案 3 :(得分:0)

Array.sort是一种不需要任何循环迭代的方法,只需调用它就足够了

你的问题是因为你循环和排序3次而完全没必要的...... 现在,您正在将元素置于 i 位置,然后排序并执行此操作3次...查看动画以获得更多说明性解释

enter image description here 你正在排序正确,但正在通过索引读取数组索引的元素,这是不正确的,没有必要

删除孔for循环,只需调用Array.Sort(数字);

//for (int i = 0; i< numbers.Length; i++)
//{
     //Console.Write(numbers[i] + " , ");
     Array.Sort(numbers);
//}

答案 4 :(得分:0)

不使用循环使用Array.Sort。如果你想对数组进行排序。

int[] numbers = new int[3] { 5, 7, 2 };
Array.Sort(numbers);