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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-01-06 16:07:02

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Sortowanie alfabetyczne

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 :

Kod:

#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;
}

[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#2  2007-01-06 19:35:26

  Lorenzo - Moderator

Lorenzo
Moderator
Zarejestrowany: 2005-12-23

Re: Sortowanie alfabetyczne

Możesz spróbowąc sortować bąbelkowo, przy pomocy takiej procedurki:

Kod:

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:

Kod:

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

 

#3  2007-01-06 20:29:29

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Re: Sortowanie alfabetyczne

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


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#4  2007-01-06 22:27:16

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: Sortowanie alfabetyczne

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.


apt-get install anarchism

Offline

 

#5  2007-01-07 03:02:37

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: Sortowanie alfabetyczne

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

 

#6  2007-01-07 09:24:09

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: Sortowanie alfabetyczne

Zawsze mozna uzyc gotowego qsorta.


apt-get install anarchism

Offline

 

#7  2007-01-07 10:26:11

  chyl-o - Członek DUG

chyl-o
Członek DUG
Skąd: Lublin
Zarejestrowany: 2006-04-04
Serwis

Re: Sortowanie alfabetyczne

A czy w tym wypadku nie chodzi o własną implementację algorytmu sortowania?


Registered Linux User: #417111
[img]http://chyl.org/pub/images/dug_button.png[/img]

Offline

 

#8  2007-01-07 17:41:52

  MG_Peter - Członek DUG

MG_Peter
Członek DUG
Skąd: Gliwice
Zarejestrowany: 2005-07-29

Re: Sortowanie alfabetyczne

ja bym użył  <algorithm.h> i sringów z c++
no i wyglądałoby to tak:

Kod:

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

 

#9  2007-01-07 23:22:50

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Re: Sortowanie alfabetyczne

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.


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#10  2007-01-08 01:18:51

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Sortowanie alfabetyczne

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) ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#11  2007-01-08 14:41:17

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Re: Sortowanie alfabetyczne

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!


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#12  2007-01-10 23:59:33

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Sortowanie alfabetyczne

narazie udalo mi sie posortowac po dlugosci, zostalo mi jeszcze posortowac te stringi alfabetycznie ale jak?
[/quote]

czyzby zadanie sor z oig?:D


[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

#13  2007-01-11 12:09:34

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Re: Sortowanie alfabetyczne

Tak :D a Ty też bierzesz udział ?


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#14  2007-01-12 18:12:36

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Sortowanie alfabetyczne

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

Kod:

#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


[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.017 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00013 SET CHARSET latin2
0.00008 SET NAMES latin2
0.00062 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.221.92.170' WHERE u.id=1
0.00120 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.221.92.170', 1715787966)
0.00044 SELECT * FROM punbb_online WHERE logged<1715787666
0.00106 SELECT topic_id FROM punbb_posts WHERE id=49511
0.00388 SELECT id FROM punbb_posts WHERE topic_id=6385 ORDER BY posted
0.00073 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=6385 AND t.moved_to IS NULL
0.00026 SELECT search_for, replace_with FROM punbb_censoring
0.00104 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=6385 ORDER BY p.id LIMIT 0,25
0.00430 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=6385
Total query time: 0.01374 s