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/.
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
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 sort
I 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
z stdin musze linijki posortowac wg. dlugosci a nastepnie uporzadkowac alfabetycznie ...
Offline
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
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
Zawsze mozna uzyc gotowego qsorta.
Offline
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
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
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
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
narazie udalo mi sie posortowac po dlugosci, zostalo mi jeszcze posortowac te stringi alfabetycznie ale jak?
czyzby zadanie sor z oig?:D
Offline
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