【问题标题】:Searching, sorting and printing a sorted 2D array of integers in C在 C 中搜索、排序和打印已排序的 2D 整数数组
【发布时间】:2012-11-27 08:17:30
【问题描述】:

我在打印二维整数数组中的最大值位置时遇到问题。即,值为 500 的元素数组 [33][2] 为最大值,其中 [33] 表示第 33 周,[2] 表示第 2 天。我想 printf(“最大值是 500,并且在第 : X 天找到”)以及 printf(“最大的一周是:Y”)(对于第一周,它是连续 7 天之内的最大总和一周)

另外,当我尝试对整数的二维数组进行排序时,排序后的版本的打印没有排序...... 我正在使用带温度的冒泡排序:

for (i=0; i<100;i++){
for(j=0;j<7;j++){
fscanf(filetoreadfrom,"%d\n",&array[i][j]);

    if(array[i][j] < array[i][j+1]){

    temp=array[i][j];
    array[i][j]=array[i][j+1];
    array[i][j+1]=temp;
    }}}

我迷路了……

【问题讨论】:

    标签: c sorting search multidimensional-array max


    【解决方案1】:

    您在读取所有数据之前对数据进行排序。先读取数据:

    for (i=0; i<100;i++){
      for(j=0;j<7;j++){
        fscanf(filetoreadfrom,"%d\n",&array[i][j]);
      }
     }
    

    然后进行排序:

    for (i=0; i<100;i++){
      for(j=0;j<7;j++){
        if(array[i][j] < array[i][j+1]){
          temp=array[i][j];
          array[i][j]=array[i][j+1];
          array[i][j+1]=temp;
        }
      }
    }
    

    而且您的排序算法不正确。例如,当j 为6 时,语句array[i][j]=array[i][j+1]; 会尝试读取array[i][7]

    【讨论】:

    • 如果我将 j=0 放在嵌套 for 的末尾会解决 [7] 的问题吗?
    • 不,您要么需要切换到第二天,要么只循环直到 j==5,具体取决于您想要做什么。对于第一种情况,创建一个名为 get_next_day 的函数并从该函数返回 i 和 j 值。
    • 我尝试创建 get_next_day 函数但无济于事,您如何正确构建它?
    • if 子句怎么样?如果(大多数天)
    • if 子句怎么样?如果(一周的最后一天)next_j = 0; next_i += 1;。在尝试对计算机进行编程之前,请尝试在脑海中进行操作。一旦你确切地知道如何去做,你就可以开始指导计算机了。 C 编译器永远不会自己解决这样的问题。
    【解决方案2】:

    只是一些随机的想法: 索引总是从 0 开始。 无需排序即可找到最大的数字。 您是否考虑过几天或几周可能具有相同值的可能性? 如果您对数组进行排序,您希望如何知道数据从哪里开始?

    祝你好运!

    【讨论】:

    • 谢谢,排序和搜索是在不同的实例中完成的。搜索最大值,然后打印包含该值的日期,还打印值总和最大的星期。稍后进行排序以按降序/升序对数据进行排序。
    • 如果您发现很难对二维数组(矩阵)进行排序,也许您应该考虑在排序之前将其展平为普通数组?
    【解决方案3】:

    在冒泡排序中,您必须不断循环遍历整个数组,直到您不必在特定循环中交换任何元素。您只循环一次,除非数组几乎已开始排序,否则将无法正常工作。

    另外,直到[i][j] 的循环结束后,您才读取元素[i][j+1],因此您将[i][j] 与存储在[i][j+1] 中的任何垃圾进行比较。在排序之前读入所有元素!

    【讨论】:

    • 我应该使用 do while 循环吗?
    • 您可能希望将整个内容包含在 do {} while (something was swapped on this iteration); 循环中。
    • 您可能希望找到一些现有的冒泡排序 C 代码来进行比较,因为所有冒泡排序基本相同。
    • 对了,你真的需要排序,还是只求最大值?
    • 排序与搜索分开使用,应用中不一起使用
    猜你喜欢
    • 2012-08-28
    • 2020-08-13
    • 1970-01-01
    • 2021-09-01
    • 2012-12-24
    • 2011-04-13
    • 1970-01-01
    • 2015-06-26
    • 2019-07-01
    相关资源
    最近更新 更多