• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

sortowanie bombelkowe struktury C++

0 głosów
969 wizyt
pytanie zadane 10 maja 2018 w C i C++ przez Sylwek4321 Nowicjusz (160 p.)

Jeżeli posortuje strukturę według wieku to jeśli ją wyświetlę to wiek jest posortowany dobrze natomiast nazwiska i imiona nie chcę się zamienić  np przed sortowaniem Jan Kowalski wiek 23 i Adam Nowak wiek 33 natomiast po sortowaniu jest Jan Kowalski 33 i Adam Nowak 23. Co zmienić w kodzie żeby wszystko się sortowało.

 


#include<iostream>
#include<cstdlib>
#include<time.h>

using namespace std;
int i,n,j;
struct Student
{
    int wiek;
    int oceny;
    int rok;
    int id;
    string imie;
    string nazwisko;
};

nowe_dane(Student *arr)
{
    int liczba=10;
    string imiona[]= {"Jan","Basia","Stasia","Kasia","Piotr","Pawel","Gawel","Lena","Ksenia","Benio"};
    string nazwiska[]= {"Nowak","Bienko","Kowalski","Wozniak","Kaczynski","Adamczyk","Dudek","Budka","Kludka","Big"};
    for(i=0; i<n; i++)
    {
        arr[i].wiek=rand()%5+20;
        arr[i].rok=rand()%5+1;
        arr[i].id=i;
        arr[i].oceny=rand()%((500-200+1)+200) /100.0;
        arr[i].imie=imiona[rand()%liczba];
        arr[i].nazwisko=nazwiska[rand()%liczba];
    }
}
void wyswietl_dane(Student *arr)
{
    for(i=0; i<n; i++)
    {
        cout<<arr[i].id<<". "<<arr[i].imie<<" "<<arr[i].nazwisko<<" wiek:"<<arr[i].wiek<<" rok:"<<arr[i].rok<<" ocena:"<<arr[i].oceny<<endl;
    }
}
void bombelkowe(Student *arr)
{
    int x;
    for (i=1; i<n; i++)
    {
        for(j=n-1; j>=1; j--)
        {
            if(arr[j].wiek<arr[j-1].wiek)
            {

                x=arr[j-1].wiek;
                arr[j-1].wiek=arr[j].wiek;
                arr[j].wiek=x;

            }
        }
    }

}

int main()
{
    srand(time(NULL));
    cout<<"Podaj liczbe studentow:";
    cin>>n;
    Student *arr=new Student[n];

    int wybor;

    do
    {
        cout<<"1.Nowe dane"<<endl;
        cout<<"2.Bombelkowe"<<endl;
        cout<<"3.Wyswietl dane"<<endl;
        cout<<"Odpowiedz:";
        cin>>wybor;

        switch(wybor)
        {
        case 1:
            nowe_dane(arr);
            break;
        case 2:
            bombelkowe(arr);
            break;
        case 3:
            wyswietl_dane(arr);
            break;
        }
    }
    while(wybor!=8);

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 11 maja 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
x=arr[j-1].wiek;
arr[j-1].wiek=arr[j].wiek;
arr[j].wiek=x;

W tym sortowaniu bąbelkowym jedyne co zmieniasz w tych strukturach to wiek. Reszta struktury w żaden magiczny sposób nie zmieni. Zamiast tych 3 linijek możesz użyć funkcji std::swap.

Podobne pytania

+1 głos
1 odpowiedź 827 wizyt
pytanie zadane 13 grudnia 2020 w C i C++ przez XYZ!12 Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 659 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)
0 głosów
2 odpowiedzi 1,222 wizyt
pytanie zadane 24 czerwca 2018 w C i C++ przez siemasiema123.96 Początkujący (350 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...