Сортировать целочисленный 3D-массив в C - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь отсортировать ввод в 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

Может кто-нибудь помочь мне разобраться, что я делаю не так.Я в основном пытаюсь отсортировать размерный массив в порядке возрастания суммы для каждого порядкового номера в каждом наборе.Любая помощь будет высоко ценится.Спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Установите counter=-1 между двумя петлями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...