eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSortowanie bąbelkowe › Re: Sortowanie bąbelkowe
  • X-Received: by 2002:ac8:468f:: with SMTP id g15mr35826701qto.353.1566465234378; Thu,
    22 Aug 2019 02:13:54 -0700 (PDT)
    X-Received: by 2002:ac8:468f:: with SMTP id g15mr35826701qto.353.1566465234378; Thu,
    22 Aug 2019 02:13:54 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news-2.dfn.de!n
    ews.dfn.de!news.uni-stuttgart.de!news.unit0.net!newsreader4.netcologne.de!news.
    netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am
    4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-med
    ia.com!f14no3925193qtq.0!news-out.google.com!d29ni2506qtg.1!nntp.google.com!f14
    no3925184qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-m
    ail
    Newsgroups: pl.comp.programming
    Date: Thu, 22 Aug 2019 02:13:54 -0700 (PDT)
    In-Reply-To: <5...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.192.68.153;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 213.192.68.153
    References: <5...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <b...@g...com>
    Subject: Re: Sortowanie bąbelkowe
    From: g...@g...com
    Injection-Date: Thu, 22 Aug 2019 09:13:54 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Bytes: 4585
    X-Received-Body-CRC: 1934068815
    Xref: news-archive.icm.edu.pl pl.comp.programming:213822
    [ ukryj nagłówki ]

    W dniu czwartek, 22 sierpnia 2019 10:57:40 UTC+2 użytkownik Maciej Sobczak napisał:
    > 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?

    Rzeczywiście ładne.
    Spośród rozwiązań na Rosetta Code to w Wolframie jest niewątpliwie najładniejsze:

    bubbleSort[{w___, x_, y_, z___}] /; x > y := bubbleSort[{w, y, x, z}]
    bubbleSort[sortedList_] := sortedList

    Szkoda tylko, że taka brzydka interpunkcja ;]

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: