Problem z algorytmem, z sortowaniem

0

Co muszę poprawić w tym programie aby dla danych

5
aabaa
daz
ccc
dba
abzzbaz

wyszedł wynik

ccc
daz
dba
aabaa
abzzbaz

Oto kod:

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

bool porownanie_alf(string a, string b)
{
    return a<b;
}
bool porownanie_dlg(string a, string b)
{
    return a.size()<b.size();
}
int main()
{
    int n;
    cin>>n;
    string pom;
    string bizuteria[201];

    for(int i=0; i<n; i++)
    {
        cin>>bizuteria[i];
    }

    sort(bizuteria, bizuteria+n, porownanie_dlg);

    for(int i=0; i<n; i++)
    {
        if (bizuteria[i]>bizuteria[i+1])
        {
            pom=bizuteria[i+1];
            bizuteria[i]=bizuteria[i+1];
            bizuteria[i+1]=pom;
        }
    }

    for(int i=0; i<n; i++)
    {
        cout<<bizuteria[i]<<endl;
    }

    return 0;
}
```php
1

O ile dobrze zrozumiałem, to potrzebujesz funkcji, która najpierw porówna stringi po długości, a dopiero w dalej kolejności leksykograficznie.

0

Trochę skomplikowane; porówananie najpierw odsyła do funkcji, która sprawdza długość, i, jak ewentualnie wrócą równe, porównuje leksykograficznie.

0

jedyne co mi się do tego udało wymyśleć to aby wywyoływać tylko jedną funkcje sort ale wtedy trzeba by było zmienić funkcje porownanie_alf, tylko że nie wiem co powinno się w niej zmienić by to zadziałało

0

Najpierw zrób sortowanie leksykograficzne, pomiń tę długośc, będziesz miał POC; a potem postaraj się dodać dodatkową funkcję sprawdzającą długość; tak to jakoś pójdzie. Acha, w, main wołasz jakieś, sort, którego nie widzę?

1
bool porownanie(const string &a,const string &b)
{
    int as=a.size(),bs=b.size();
    return (as==bs)?a<b:as<bs;
}

...
    sort(bizuteria,bizuteria+n,porownanie);

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