Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言对整型3D数组进行排序_C_Arrays_Sorting_3d_Sum - Fatal编程技术网

用C语言对整型3D数组进行排序

用C语言对整型3D数组进行排序,c,arrays,sorting,3d,sum,C,Arrays,Sorting,3d,Sum,我试图用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;

我试图用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 
2 17
3 18

SET 2
而不是:

SET 1
2 17
3 18
1 21

SET 2 
1 27
2 21

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

在两个for循环之间设置
计数器=-1

在两个for循环之间设置
计数器=-1

在第二个for循环中使用计数器之前,您不会重置它。4Mb对于堆栈可能太大,也可能不太大,这取决于系统。你真的不应该在那里分配。有关备选方案,请参阅上一个问题的链接副本。在秒for循环中使用计数器之前,您不会重置计数器。4Mb对于堆栈可能太大,也可能不太大,具体取决于系统。你真的不应该在那里分配。请参阅上一个问题的链接副本,以获取备选方案。是的,我已经尝试过,但没有任何区别:(谢谢。我已经在我的计算机上在两个for循环之间完成了它,它工作正常。你指的是哪一个for循环?在你的两个主
for
循环之间。是的,我试过了,但没有什么不同。)(谢谢。我已经在我的电脑上完成了两个for循环之间的操作,它可以正常工作。你指的是哪一个for循环?在你的两个主
for
循环之间。
SET 1
2 17
3 18
1 21

SET 2 
1 27
2 21