Sortowanie tablicy

0

Witam,

Program polegać ma na posortowaniu nazwisk z tablicy. Do zadania muszę użyć struktury.

Niestety funkcja sortowania bąbelkowego nie działa, ponieważ wypisują się elementy nieposortowane.

#include <iostream>
#include <string.h>
#include <cstdlib>
#include <algorithm>
using namespace std;

struct Osobaa {
    string imie;
    string nazwisko;
};

string pomoc1, pomoc2;

int main()
{
    Osobaa osoba[40];

    int n, i;

    cout << "Ile osob chcesz wprowadzic: ";
    cin >> n;

    for (i = 0; i < n; i++) {
        cout << "Osoba " << i << endl;
        cout << "Imie: ";
        cin >> osoba[i].imie;
        cout << "Nazwisko: ";
        cin >> osoba[i].nazwisko;
    }

    for (i = 0; i < n; i++) {
        for (int j = 0; j < n - 1; j++) {
            if (osoba[i].nazwisko > osoba[i + 1].nazwisko)
                ;
            {
                pomoc1 = osoba[i].imie;
                pomoc2 = osoba[i].nazwisko;
                osoba[i].imie = osoba[i + 1].imie;
                osoba[i].nazwisko = osoba[i + 1].nazwisko;
                osoba[i + 1].imie = pomoc1;
                osoba[i + 1].nazwisko = pomoc2;
            }
        }
    }

    cout << " " << endl;

    cout << "Elementy posortowane: " << endl;

    for (i = 0; i <= n; i++) {

        {
            cout << osoba[i].nazwisko << " " << osoba[i].imie << endl;
        }
    }

    return 0;
}
``
0

W mainie to wygląda słabo (trzeba podzielić na funkcje), poza tym: słabe porównanie (a co jak te same nawiska?), imiona też istnieją, no i ten mess w sortowaniu :) - lepiej sobie wyodrębnić porównywanie osób; po uporządkowaniu:

struct Osoba{
	string imie;
	string nazwisko;
};

bool compareOsoba(Osoba left, Osoba right) {
	if (left.nazwisko.string::compare(right.nazwisko) > 0) {
		return true;
	}
	else if (left.nazwisko.string::compare(right.nazwisko) < 0) {
		return false;
	}
	else {
		if (left.imie.string::compare(right.imie) > 0) {
			return true;
		}
		else if (left.imie.string::compare(right.imie) < 0) {
			return false;
		}
		return true;
	}
}
void insertionSortOsoba(Osoba arr [], int sz) {
	int i, j, min;
	for (i = 0; i < sz - 1; ++i) {
		min = i;
		for (j = i + 1; j < sz; ++j) {
			if (compareOsoba(arr[j], arr[min]))
				min = j;
		}
		Osoba tmp = arr[min];
		arr[min] = arr[i];
		arr[i] = tmp;
	}
}

int main(int argc, char** argv) {
	Osoba a{};
	Osoba b{};
	a.imie = "as";
	a.nazwisko = "zc";
	b.imie = "dk";
	b.nazwisko = "ck";
	Osoba persons[2];
	persons[0] = a;
	persons[1] = b;
	insertionSortOsoba(persons, 2);
	for (int i = 0; i < 2; ++i){
		cout << persons[i].nazwisko <<" " << persons[i].imie << "\n";
	}
	std::cout <<"\n";
	return 0;
}

String compare: https://www.geeksforgeeks.org/stdstringcompare-in-c/

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