Sortowanie kubełkowe, język C

0

Mam problem z dodaniem opcji sortowania kubełkowego. Mianowicie chodzi o posortowanie studentów według numerów indeksów. Nie wiele wiem o programowaniu, przegrzebałem internet ale nigdzie nie mogę znaleźć rozwiązania. Czy ktoś ma jakiś pomysł jak dodać taką opcję? Oto kod:

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


typedef struct student

{
    char imie[33];
    char nazwisko[33];
    int nr_indeksu;
    struct student* next;
}student;
//zlicza dlugosc listy
int dlugosc_listy(student* lista)
{
    int d=NULL;
    student* wsk=lista;
    while(wsk!=NULL){
        d++;
        wsk = wsk->next;

    }
    return d;
}
//dodaj nowy wezel do listy
void dodaj(student**lista, student* nowa)

{
     while (*lista != NULL) lista = &((*lista)->next);
     *lista = nowa;
     nowa->next = NULL;
}
//dodaj osobe do listy
void dodaj_stud(student** lista)
{
    student*nowa=(student*)malloc(sizeof(student));
    printf("Podaj imie: ");
    scanf("%s", nowa->imie);

    printf("Podaj nazwisko: ");
    scanf("%s", nowa->nazwisko);

    printf("Podaj numer indeksu: ");
    scanf("%d", &(nowa->nr_indeksu));

    dodaj(lista, nowa);

}
//wypisuje liste
void wypisz_liste(student* lista)
{
    student* wsk=lista;

    if(lista==NULL)
        printf("Lista jest pusta");
        else
        printf("Lista zawiera %d studentow:\n", dlugosc_listy(lista));

        int a = 1;
     while(wsk!=NULL)
     {
            printf("%d %s %s %d\n", a, wsk->imie, wsk->nazwisko, wsk->nr_indeksu);
            wsk=wsk->next;
            a++;
     }
        }
        //sortowanie
        void kubki(int array[], int n) {
  int i, j;
  int count[n];
  for(i=0; i < n; i++) {
    count[i] = 0;
  }

  for(i=0; i < n; i++) {
    (count[array[i]])++;
  }

  for(i=0,j=0; i < n; i++) {
    for(; count[i]>0; (count[i])--) {
      array[j++] = i;
    }
  }

}
int main()
{

    student* lista = NULL;

              int option;

 while(option != 0)
           {
printf("\n\n MENU");
printf("\n\n\n 0 Wyjscie z programu");
printf("\n 1 Wpisz dane studenta");
printf("\n 2 Wyswietl cala liste");
printf("\n 3 Wyswietl liste po posortowaniu\n");
           scanf("%d", &option);

           switch(option)
           {

                         case 1:
                              printf("DODAWANIE STUDENTA\n");
                              dodaj_stud(&lista);
                              break;

                         case 2:
                              printf("WYSWIETL CALA LISTE\n");
                              wypisz_liste(lista);
                              break;
                         case 3:
                            printf("WYSWIETL LISTE PO POSORTOWANIU\n");
                            break;
                         }
          }
} ```
1

Wystarczy Bracie że uświadomisz sobie, iż do funkcji sortującej należy przesłać listę, a owa lista zawiera instancje struktury student.

No dobra, to obszerniejsze wyjaśnienie.
Zanim zaczniesz zastanawiać się nad zagadnieniem sortowania upewnij się, że program poprawnie dodaje i wyświetla znajdujących się na liście studentów. Tutaj polecam małe przeprojektowanie programu, aby miał funkcje:

  • dodajStudentaDoListy
  • wyswietlListeStudentow
  • posortujListeStudentow

Jak powyższe będzie działało, to dopisujesz sobie funkcję o mniej więcej takim prototypie:

void posortujListeStudentow(student *lista, size_t wielkoscListy, opcjonalny parametr określający po jakim polu struktury student posortuje)

Następnie przeszukujesz internet na temat materiałów odnośnie sortowania kubełkowego, ot pierwszy z brzega na Wikipedii, a jak już zrozumiesz na czym polega implementujesz je u siebie. Przy czym podpowiedź - jako pole struktury które będziesz porównywał zastosuj nr_indeksu, w wersji łatwiejszej rzecz jasna.

Inna opcja to ogłosić się w https://4programmers.net/Forum/Ogłoszenia_drobne i zaproponować stawkę, ale to mało dydaktyczne dla ciebie rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1