Sortowanie char nie do końca dobrze sortuje

0
   int i,j;     
     for(j=n-2;j>=0;j--)
     {
                         x=tablica[j];
                         i=j+1;
                         int comp=strcmp(x.nazwisko, tablica[i].nazwisko);
                         while(i<n && comp>0)
                         {
                         tablica[i-1]=tablica[i];
                         i++;
                          }
			 tablica[i-1]=x;
			 comp=strcmp(x.nazwisko, tablica[i].nazwisko);	
                                    
                         
                                                  
                         }          
                         }
                                
                               break;

Mam problem, bo to sortowanie przez wstawianie nie działa do końca. Sortuje nazwiska w ten sposób że poniższe dane są posortowane wg nazwisk, ale nie wszystkie. Pewnie jakiś głupi mój błąd ale potrzebuje pomocy
Przemyslaw Chlopek 2k 5.12
Ewelina Ciochon 2k 5.120
Agnieszka Cygan 2k 5.354
Grzegorz Cygan 2k 5.05
Michal Dadej 2k 6.01
Jaroslaw Fraczek 2k 5.242
Piotr Gawle 2k 5.121
Mateusz Hamowski 2k 5.144
Dariusz Rzepka 2k 4.445
Adrianna Pochron 2k 4.550
Bartlomiej Chamowski 2d 4.021

po sortowaniu wg nazwisk

Bartlomiej Chamowski 2d 4.021
Adrianna Pochron 2k 4.55
Dariusz Rzepka 2k 4.445
-------- dotąd dobrze ----
Mateusz Hamowski 2k 5.144
Piotr Gawle 2k 5.121
Jaroslaw Fraczek 2k 5.242
Michal Dadej 2k 6.01
Grzegorz Cygan 2k 5.05
Agnieszka Cygan 2k 5.354
Ewelina Ciochon 2k 5.12
Przemyslaw Chlopek 2k 5.12

Dlaczego? Jaki walnąłem błąd?

0

Porównaj 1 z listy i ostatnie z sortowania, 2 z listy i przedostatnie itp. To w ogóle nie sortuje.

0

Sortuje dopiero za drugim razem dobrze sam sobie odpowiedziałem na to pytanie, ma być wcześniej ponowne przypisanie do comp, w środku while'a

Macron napisał(a)

Porównaj 1 z listy i ostatnie z sortowania, 2 z listy i przedostatnie itp. To w ogóle nie sortuje.

Już działa ! A brzmi teraz tak i wiedz, że coś się dzieje

 {
                         struct UCZEN x;
                                                  
     int i,j;     
     for(j=n-2;j>=0;j--)
     {
                         x=tablica[j];
                         i=j+1;
                         
                         int comp=strcmp(x.nazwisko, tablica[i].nazwisko);
                         while(i<n && comp>0)
                         {
                         tablica[i-1]=tablica[i];
                         i++;
                         comp=strcmp(x.nazwisko, tablica[i].nazwisko);
                          }
			 tablica[i-1]=x;
			 	
                                    
                         
                                                  
                         }          
                         }
                           

Jak macie jakieś sugestie co do kodu walcie

0

Podałem Ci algorytm sortowania, to czemu go nie przepisałeś tak jak tam było, wystarczyło zamienić na składowe struktury.

#include <iostream>
#include <cstring>
using namespace std;

const int R = 3;

typedef struct
 {
 char imie[20];
 char nazwisko[40];
 char klasa[10];
 float srednia;
 } UCZEN;

void sortuj(UCZEN*);

int main()
{
	UCZEN tablica[R];

	cout << "Wprowadz dane:\n";

	for(int i = 0; i < R; i++)
	{
		cout << "Imie: ";
			cin >> tablica[i].imie;

		cout << "Nazwisko: ";
			cin >> tablica[i].nazwisko;

		cout << "Klasa: ";
			cin >> tablica[i].klasa;

		cout << "Srednia: ";
			cin >> tablica[i].srednia;
	}

	
	sortuj(tablica);

	for(int i = 0 ; i < R; i++)
		cout << "Imie: " << tablica[i].imie << " Nazwisko: " << tablica[i].nazwisko << " Klasa: " << tablica[i].klasa << " Srednia: " << tablica[i].srednia << endl;

	system("pause");
	return 0;
}

void sortuj(UCZEN* tab)
{
	int i,j;
	UCZEN x;
      
    for(j = 1; j < R; j++)
    {
		x = tab[j];
        i = j;
		while(i > 0 && strcmp(tab[i - 1].imie, x.imie) > 0)
        {
			tab[i] = tab[i - 1];
            i--;
        }
        
		tab[i] = x;
    }
}

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