Как мне отсортировать массив структур в C по имени, возрасту и идентификатору?

#c #sorting #struct #selection #bubble-sort

#c #сортировка #структура #выбор #пузырьковая сортировка

Вопрос:

Я не знаю, как создать функцию для сортировки массива структур по значениям. Любые советы полезны.

Я не понимаю, как передать значения в функцию, а затем отсортировать список структур по возрасту, а затем по имени.

Я хочу посмотреть, как организовать массив структур, поскольку позже мне придется использовать несколько файлов с именами, возрастом, идентификаторами.

 //- Functions needed
//Swap
//Selection sort
//Bubble sort

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct person
{
    int age;
    double id;
    char name[64];

} person;

int main()
{
    person **array = calloc(2, sizeof(person*));

    int sizes[2];
    

    for (int i = 0; i < 5; i  ) {
        array[i] = calloc(sizes[i], sizeof(person));
    }

    //Num1
    strcpy(array[1][0].name, "0yblTP");
    array[1][0].id = 7.567;
    array[1][0].age = 34;

    //Num 2
    strcpy(array[1][1].name, "t700nwzB");
    array[1][1].id = 8.6576;
    array[1][1].age = 85;

    //Num3
    strcpy(array[1][2].name, "Vx8eR");
    array[1][2].id = 179;
    array[1][2].age = 59;

    //Num4
    strcpy(array[1][3].name, "n5FUgA");
    array[1][3].id = 1.082797;
    array[1][3].age = 45;

    //Num5
    strcpy(array[1][4].name, "Bzm9dq");
    array[1][4].id = 179;
    array[1][4].age = 23;

}
  

Ответ №1:

я думаю, что «отправить массив person» в функцию сортировки, и сортировка их в функции хороша для решения вашей проблемы.

 void main {
  //Swap (amp;person, amp;person) === Swap(amp;array[1][i], amp;array[i][j])
  //Selection sort(array[1])
  //Bubble sort(array[1])
}
  

вот так. это отправит адрес вашего массива person каждой функции сортировки, поэтому вам просто нужно выполнить каждую функцию внутри.

 void selectionSort(person*) {
  for(int i = 0; i < length of person array; i  ) {
    (algorithm for sorting your person by age, name)
     you can use them by person[i].age
  }
}
  

вот так.

  • я думаю, что это лучше, чем ваше умение помещать struct в массив

       person* A = calloc..
      A.name = ".."
      A.id = ".."
      A.age = ".."
    
      //and then put your struct in the array
    
      array[1][i] = A;