Sortowanie bąbelkowe vectora 2D

0

Mam problem, otóż próbuję posortować liczby, które są umieszczone w vectorze 2D, mianowicie - każdy "wiersz" to osobna liczba, a każda "komórka" to osobna cyfra tej liczby.

vector <int> character(1);
vector < vector <int> > line(1, character);

(Dane są wczytywane w pętli z pliku.)

I chciałbym te liczby (wiele z nich przekracza zakres long long int) posortować od najmniejszej do największej - robię to tak:

//Bubble sort :)
	for (int i=0; i<line.size()-1; i++)
	{
		for (int j=0; j<line.size()-i-1; j++)
		{
			if (line[j].size()>line[j+1].size()) swap(line[j],line[j+1]);
			else if (line[j].size()==line[j+1].size())
			{
				for (int k=0; k<line[j].size()-1; k++)
				{
					if (line[j][k]>line[j+1][k]) {swap(line[j],line[j+1]); break;}
				}
			}
		}
	}

No i owszem, według ilości cyfr liczby te są świetnie posortowane - ale liczby o tej samej długości już nie.
W najbardziej wewnętrznej pętli oparłem się na założeniu, że należy porównywać kolejne cyfry k (od lewej, np. od tysięcy do jedności) danych dwóch liczb j i j+1, by określić która jest większa.
Czy ktoś jest mi w stanie wskazać co jest nie tak?

0

Spróbuj porównać wewnętrznym algorytmem dwie liczby poniżej (przykład):

30003
10001

I co?? wykonasz funkcję swap(...) dwa razy! Pierwszy raz przy pierwszym znaku i drugi raz przy ostatnim (bo za każdym razem 3 > 1). Musisz po pierwszym wykryciu "większości" zakończyć porównywanie.

0

Ach, tak, zapomniałem o "break;"
Ale z nim - czy bez niego - dalej nie działa poprawnie [zaraz dopiszę w 1. poście, może w złym miejscu umieszczam?]

0
#include <algorithm>

bool lessIntVectorComparator(const vector <int>& a, const vector <int>& b)
{
    if (a.size()!=b.size())
         return a.size()<b.size(); 

    ....
    return result;
}

std::sort(line.begin(), line.end(), lessIntVectorComparator);
0

Działa! :) Stokrotne dzięki :)

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