这个C语言代码的结果有什么解释?

时间:2015-05-05 04:19:06

标签: c arrays sorting

这是我的计算机科学最终学习指南中的一个问题。正确的答案是x [2] = 7和x [4] = 4.当我尝试解释代码时,似乎x [2]的值甚至没有被sort函数改变。但它确实是!有人可以解释为什么x [2] = 7和x [4] = 4?谢谢!

#include<stdio.h>

 #define SIZE 10

 void sort(int[], int);

 int main()
 {
   int x[SIZE] = {2, 4, 6, 8, 1, 3, 5, 7, 9, 0};
   sort(x, -1);
   printf("x[2] = %d\n", x[2]);
   sort(x, 1);

   printf("x[4] = %d\n", x[4]);
   return(0);
 }

 void sort(int x[], int dir)
 {
   int i;
   int j;
   int temp;

   for(i = 1; i < SIZE; i++)
   {
     for(j = SIZE - 1; j >= i; j--)
     {
       if(dir == -1 && x[j] > x[j - 1] || dir == 1 && x[j] < x[j - 1])
       {
         temp = x[j - 1];
         x[j - 1] = x[j];
         x[j] = temp;
       }
     }
   }
 }

2 个答案:

答案 0 :(得分:1)

sort函数是bubblesort变体。如果dir为-1,则按降序对数组进行排序。如果dir为1,则按升序对数组进行排序。

第一次排序后,数组将按降序排列:

9 8 7 6 5 4 3 2 1 0

所以x[2]将是7。

第二次排序后,arry将按升序排列:

0 1 2 3 4 5 6 7 8 9

所以x[4]将是4。

答案 1 :(得分:0)

代码如下:

from left to right in the array
  from right to left in the array, as long as you hit the upcoming count
     if the current left is bigger than it's lower predecessor
        swap 'em    

它是一种交换排序算法。 内环可能触摸X [2]两次

  • 首先是因为j&gt; = i
  • 其次是与前任的比较