在C中搜索,排序和打印排序的二维整数数组

时间:2012-12-09 21:38:49

标签: c sorting search multidimensional-array max

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

此外,当我尝试对整数的2D数组进行排序时,排序版本的打印未排序... 我正在使用带有temp的冒泡排序:

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;
    }}}

我迷失了......

3 个答案:

答案 0 :(得分:2)

在阅读所有数据之前,您正在对数据进行排序。首先阅读数据:

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]

答案 1 :(得分:1)

只是一些随意的想法: 索引始终以0开头。 没有必要排序找到最大的数字。 您是否考虑过几天或几周可能具有相同价值的可能性? 如果对数组进行排序,您希望如何知道数据的开始位置?

祝你好运!

答案 2 :(得分:0)

在冒泡排序中,您必须在整个数组上循环,直到您不必交换特定循环上的任何元素。你只循环一次,这将无法工作,除非数组几乎按照开始排序。

此外,在完成[i][j+1]的循环之前,您不会在元素[i][j]中读取,因此您将[i][j][i][j+1]中存储的任何垃圾进行比较}。在排序之前,请读入所有元素!