Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

Użytkownik


Witam
Caly dzien sie mecze z tym sortowaniem
narazie udalo mi sie posortowac po dlugosci, zostalo mi jeszcze posortowac te stringi alfabetycznie ale jak?
Bawilem sie ze 100 razy if'ami , for'ami i nie moge nic z tym zrobić.
Prosze chociażby o sugestie , przykład
moj program :
#include <iostream>
#include <string>
using namespace std;
int main()
{
char litery[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x',
'y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
};
int w,n;
int i=0;
string lancuch[150];
scanf("%d",&n);
while(i<n)
cin >> lancuch[i++];
for(w=1;w<200;w++)
for(i=0;i<150;i++)
if(lancuch[i].length()==w)
cout << lancuch[i] <<endl;
return 0;
}
Offline



Moderator




Możesz spróbowąc sortować bąbelkowo, przy pomocy takiej procedurki:
void sort(char chrArray[], int intSize) //intSize jest wielkością tablicy
{
int war; //zmienna odpowiedzialna za okreslenie prawdziwosci warunku
int i; //licznik petli for
int k; //licznik petli do while
char chrMem; //zmienna pomocnicza do przechowania wartosci komorki tablicy
do
{
war=0;
for(i=0;i<intSize-1;i++)
{
k=i+1;
if (chrArray[k]<chrArray[i])
{
chrMem=chrArray[i];
chrArray[i]=chrArray[k];
chrArray[k]=chrMem;
war=1;
}
}
}
while (war!=0);
} //end of procedure sortI wywołać ją w mainie poprzez:
sort(litery,intSize)
P.S. Jeszcze że tak zgłupa spytam. Chcesz posortwać tablice litery[] i wstawić ją do tablicy lancuch[], czy jak?
P.P.S. Z góry sorki za jakąś pomyłkę - nie programowałem nic od roku ;-)
Offline

Użytkownik


z stdin musze linijki posortowac wg. dlugosci a nastepnie uporzadkowac alfabetycznie ...
Offline

Członek DUG


bleee sortowanie babelkowe sie do niczego nie nadaje, jest nieedukacyje i posiada duza zlozonosc.
Duzo lepiej jest zaimplementowac sobie quicksorta badz uzyc juz gotowego. funkcja qsort znajduje sie w cstdlib. Pozostaje tylko stworzenie funkcji porownujacej co nie stanowi chyba problemu.
Offline

Użytkownik


Każdy rodzaj sortowania ma swoje zastosowanie. Co więcej quicksort nie zawsze jest szybszy od sortowania bąbelkowego. Dla kilku rekordów nie warto tracić zbyt dużo czasu na implementacje imho.
Offline

Członek DUG


Zawsze mozna uzyc gotowego qsorta.
Offline


Członek DUG

Członek DUG


ja bym użył <algorithm.h> i sringów z c++
no i wyglądałoby to tak:
string naszeStringi[1000]; /* *** */ sort(naszeStringi, naszeStringi+1000);
jako, że operatory < > == dla stringów już są przeładowane (mowa o cpp) - nie ma problemu :-)
a jeśli chcesz posortować to dowolnym algorytmem - to pamiętaj, w cpp dla stringów już zdefiniowano czym jest < a czym > :)
Offline

Użytkownik


Z liczbami bym pewnie sobie poradził ale nie mam już pojęcia jak uporządkować alfabetycznie. Moze ktoś napisze jakiś kawałeczek kodu?
Zakładając ze mam posortowaną tablice wg. dlugosci stringów o nazwie poukladane;)
aha ilosc stringow w tablicy to zmienna ile
Prosze Was o pomoc.
Chodzi mi caly czas o uporzadkowanie leksykograficzne.
Offline




Moderator Mamut
pisac kodu mi sie nie chce ale mozna podejsc do tego tak:
1. piszemy sortowanie (sortujemy po pierwszej, w nastepnym obiegu gdy pierwsze sie powtarzaja po drugiej itd.
2. piszemy funkcje porownujaca dla zaproponowanego qsorta porownujemy kolejne znaki
warto zaznaczyc ze wystarczy porownywac kody ascii jako liczby bez dodatkowych komplikacji (litery w ascii sa po koleji) ...
Offline

Użytkownik


Zrobiłem na bąbelkowym - śmiga aż miło :)
jakby ktoś miał problem z sortowanie to polecam http://www.i-lo.tarnow.pl/edu/inf/alg/algsort/pages/006.php
Dzięki panowie, duże e-piwo stawiam!
Offline
Członek DUG

narazie udalo mi sie posortowac po dlugosci, zostalo mi jeszcze posortowac te stringi alfabetycznie ale jak?
czyzby zadanie sor z oig?:D

Offline

Użytkownik
Członek DUG

Nie, ale widzialem tresci zadan. (Ladnie to tak szukac pomocy:D? )
Teraz jak juz sie zakonczylo to moge napisac:D
To zadanie pierwsze powinienes sortowac alfabetycznie, pozniej po dlugosci.
Mozna by to napisac mniej wiecej tak
#include <cstdio>
#include <cstring>
using namespace std;
const int max_line = 150;
const int max_length = 200;
void sort_leksy(char * * adr, int n);
void sort_len(char * * adr, int n);
main()
{
static char znaki[max_line][max_length + 1];
char * adr[max_line];
int n, i;
scanf("%i", &n);
for(i = 0; i < n; i++)
{
scanf("%s", znaki[i]);
adr[i] = znaki[i];
}
sort_leksy(adr, n);
sort_len(adr, n);
for(i = 0; i < n; i++)
{
printf("%sn", adr[i]);
}
}
void sort_len(char * * adr, int n)
{
int tab[max_line];
int i,
j,
tmp,
str_len;
char * tmp_adr;
bool sort = true;
for(i = 0; i < n; i++)
{
j = 0;
while( adr[i][j++] != ' ')
;
tab[i] = j - 1;
}
while(sort)
{
sort = false;
for(i = n - 1; i > 0; i--)
{
if(tab[i] < tab[i - 1])
{
tmp = tab[i];
tab[i] = tab[i - 1];
tab[i - 1] = tmp;
tmp_adr = adr[i];
adr[i] = adr[i - 1];
adr[i - 1] = tmp_adr;
sort = true;
}
}
}
}
void sort_leksy(char * * adr, int n)
{
char * tmp;
int kmax,
i,
j;
for(i = 0; i < n-1; i++)
{
kmax = i;
for(j = i + 1; j < n; j++)
{
if(strcmp(adr[kmax], adr[j]) > 0)
{
kmax = j;
}
}
tmp = adr[kmax];
adr[kmax] = adr[i];
adr[i] = tmp;
}
}Dalo by sie pewnie jeszcze bardziej optymalnie, ale nie chce mi sie bawic:D

Offline