【问题标题】:What is the explanation for the outcome of this C language code?这个 C 语言代码的结果是什么解释?
【发布时间】:2015-05-05 04:19:06
【问题描述】:

这是我的计算机科学期末学习指南中的一个问题。正确答案是 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;
       }
     }
   }
 }

【问题讨论】:

    标签: c arrays sorting


    【解决方案1】:

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

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

    9 8 7 6 5 4 3 2 1 0
    

    所以x[2] 将是 7。

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

    0 1 2 3 4 5 6 7 8 9
    

    所以x[4] 将是 4。

    【讨论】:

      【解决方案2】:

      代码大致如下:

      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 >= i
      • 与前作对比次之

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-28
        相关资源
        最近更新 更多