【问题标题】:Sort Integer 3D Array in C在 C 中对整数 3D 数组进行排序
【发布时间】:2019-03-06 15:16:07
【问题描述】:

我正在尝试对 C 中的输入进行排序,但我不断得到错误的答案,我无法识别我的错误。我正在尝试使用简单的冒泡排序技术。

这是我的代码:

#define SIZE 100

int main() {

char input[MAXSIZE];

int dummy[MAXSIZE];

int sequenceNumber[MAXSIZE];
int tracker=-1;

int array[MAXSIZE][MAXSIZE][MAXSIZE];

int set=-1;
int sequence=-1;

int counter=-1;
int temp=0;



while (1==1) {
   if (fgets(input, MAXSIZE-1, stdin) == NULL){
     printf("Invalid Input");
     break;
   }else {

     char* s;

     for (s = input; (*s != '\n') && isspace(*s); s++){
        continue; 
     }

     if (*s == '\n'){

        continue;

     } else if (*s == 'f'){

        break; 

     } else if (*s == 'S'){

        set++;
        sequence=-1;

     } else{

        sscanf(input, "%d: %d, %d, %d, %d, %d", &dummy[0], &dummy[1], &dummy[2], &dummy[3], &dummy[4], &dummy[5]);
        sequence++;
        array[set][sequence][0]=dummy[0];
        array[set][sequence][1]=dummy[1]+dummy[2]+dummy[3]+dummy[4]+dummy[5];

        if (sequence==0){
            tracker++;
        }
        sequenceNumber[tracker]=sequence+1;

     }

   }
}


for (int i=0;i<set; i++){
    for (int j=0;j<tracker;j++){
        counter++;
        for (int k=0; k<sequenceNumber[counter];k++){
            if (array[i][k][1]<array[i][k+1][1])
                temp=array[i][k][1];
                array[i][k][1]=array[i][k+1][1];
                array[i][k][0]=array[i][k+1][0];
                array[i][k+1][1]=temp;
        }
    }
 }


for (int i=0; i<=set;i++){
    printf("\n");
    printf("SET %d\n",i+1);
    for (int j=0;j<tracker;j++){
        counter++;
        for (int k=0; k<sequenceNumber[counter];k++){
            printf("%d %d\n",array[i][k][0],array[i][k][1]);
        }
    }
}


return 0;
}

关于输入:

SET 1

1: 5,5,6,5
2: 3,4,5,5
3: 3,4,5,6

SET 2

1: 5,7,8,7
2: 5,5,5,6


finish

我明白了:

SET 1 
2 17
3 18

SET 2

代替:

SET 1
2 17
3 18
1 21

SET 2 
1 27
2 21

谁能帮我弄清楚我做错了什么。我基本上是在尝试按总和的升序对每个集合中的每个序列号进行排序。任何形式的帮助将不胜感激。谢谢。

【问题讨论】:

  • 在第二个 for 循环中使用 counter 之前,您没有重置它。
  • 4Mb 对于堆栈来说可能太大也可能不会太大,具体取决于系统。你真的不应该在那里分配它。请参阅与您上一个问题的链接副本以获取替代方案。

标签: c arrays sorting 3d sum


【解决方案1】:

在两个 for 循环之间设置 counter=-1

【讨论】:

  • 是的,我试过了,但没有任何区别。 :(谢谢。
  • 我已经在我的计算机上的两个 for 循环之间完成了它,它的工作原理。
  • 你指的是哪个for循环?
  • 在两个主要的for 循环之间。
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 2018-06-06
  • 2021-06-18
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2019-06-08
  • 2011-04-23
相关资源
最近更新 更多