eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSortowanie bąbelkowe › Sortowanie bąbelkowe
  • X-Received: by 2002:ac8:734f:: with SMTP id q15mr1572816qtp.19.1566464259411; Thu, 22
    Aug 2019 01:57:39 -0700 (PDT)
    X-Received: by 2002:ac8:734f:: with SMTP id q15mr1572816qtp.19.1566464259411; Thu, 22
    Aug 2019 01:57:39 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin2
    !goblin.stu.neva.ru!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!85.12.16.70.MIS
    MATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwi
    nds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!f
    14no3887332qtq.0!news-out.google.com!d29ni2506qtg.1!nntp.google.com!f14no388732
    4qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Thu, 22 Aug 2019 01:57:39 -0700 (PDT)
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=165.225.84.70;
    posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
    NNTP-Posting-Host: 165.225.84.70
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <5...@g...com>
    Subject: Sortowanie bąbelkowe
    From: Maciej Sobczak <s...@g...com>
    Injection-Date: Thu, 22 Aug 2019 08:57:39 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Bytes: 3926
    X-Received-Body-CRC: 2041603032
    Xref: news-archive.icm.edu.pl pl.comp.programming:213821
    [ ukryj nagłówki ]

    Nudy jakieś, wszyscy na urlopach?
    W każdym razie, skoro ostatnio były tu fajne dyskusje o różnych językach
    programowania, to pozwolę sobie dla hecy pokazać sortowanie bąbelkowe w Wolframie.

    Otóż jak wiadomo, pojedynczy krok sortowania polega na tym, że jeśli gdzieś jest para
    elementów w "niewłaściwej" kolejności, to trzeba je zamienić miejscami. A potem
    powtarzać to aż do skutku.

    No to mamy, pojedynczy krok:

    oneBubbleStep[lst_] :=
    lst /. {pre___, a_, b_, post___} /; a > b -> {pre, b, a, post}

    oneBubbleStep to funkcja, która ma jeden parametr, nazwany lst. Ta funkcja szuka
    wzorca:

    {pre___, a_, b_, post___}

    wzorzec ma być listą, składającą się z:
    1. jakiegoś pre, zero lub więcej elementów
    2. jakiegoś a
    3. jakiegoś b
    4. jakiegoś post, zero lub więcej elementów

    i jeśli przypadkiem a > b, to znaleziony wzorzec ma być zamieniony na taki:

    {pre, b, a, post}

    czyli elementy a i b mają się zamienić miejscami. Jeśli wzorzec nie pasuje, to żadna
    zmiana nie jest wykonana. To zadziała zawsze, nawet na brzegach, np.:

    oneBubbleStep[{10, 20, 40, 30, 50}]

    {10, 20, 30, 40, 50}

    I teraz biorę jakieś dane testowe:

    testData = RandomSample[Range[10], 10]

    {2, 10, 1, 3, 8, 9, 6, 4, 5, 7}

    i aplikuję funkcję oneBubbleStep tak długo, aż wynik przestanie się zmieniać,
    pokazując po drodze wszystkie pośrednie wyniki (sformatowałem ręcznie):

    FixedPointList[oneBubbleStep, testData]

    {
    {2, 10, 1, 3, 8, 9, 6, 4, 5, 7},
    {2, 1, 10, 3, 8, 9, 6, 4, 5, 7},
    {1, 2, 10, 3, 8, 9, 6, 4, 5, 7},
    {1, 2, 3, 10, 8, 9, 6, 4, 5, 7},
    {1, 2, 3, 8, 10, 9, 6, 4, 5, 7},
    {1, 2, 3, 8, 9, 10, 6, 4, 5, 7},
    {1, 2, 3, 8, 9, 6, 10, 4, 5, 7},
    {1, 2, 3, 8, 6, 9, 10, 4, 5, 7},
    {1, 2, 3, 6, 8, 9, 10, 4, 5, 7},
    {1, 2, 3, 6, 8, 9, 4, 10, 5, 7},
    {1, 2, 3, 6, 8, 4, 9, 10, 5, 7},
    {1, 2, 3, 6, 4, 8, 9, 10, 5, 7},
    {1, 2, 3, 4, 6, 8, 9, 10, 5, 7},
    {1, 2, 3, 4, 6, 8, 9, 5, 10, 7},
    {1, 2, 3, 4, 6, 8, 5, 9, 10, 7},
    {1, 2, 3, 4, 6, 5, 8, 9, 10, 7},
    {1, 2, 3, 4, 5, 6, 8, 9, 10, 7},
    {1, 2, 3, 4, 5, 6, 8, 9, 7, 10},
    {1, 2, 3, 4, 5, 6, 8, 7, 9, 10},
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    }

    Ten "program" ma swoją interpunkcję, która na pewno się tu komuś nie spodoba, ale ma
    ciekawą zaletę: odzwierciedla opis słowny. Fajne?

    --
    Maciej Sobczak * http://www.inspirel.com

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: