Article View: pl.comp.programming
Article #215869Sortowanie bąbelkowe
From: Maciej Sobczak
Date: Thu, 22 Aug 2019 08:57
Date: Thu, 22 Aug 2019 08:57
68 lines
3811 bytes
3811 bytes
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
Technical Details
Message-ID:
<5889b9db-7fee-49e4-acd6-1f037733f5f3@googlegroups.com>Path:
mbox-mo1.pugleaf.net!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.MISMATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!f14no3887332qtq.0!news-out.google.com!d29ni2506qtg.1!nntp.google.com!f14no3887324qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailShow Full Headers
Complete Article Headers
X-Received: by 2002:a37:a8c2:: with SMTP id r185mr34618556qke.344.1566464259570; 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: mbox-mo1.pugleaf.net!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.MISMATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!f14no3887332qtq.0!news-out.google.com!d29ni2506qtg.1!nntp.google.com!f14no3887324qtq.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: groups-abuse@google.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: <5889b9db-7fee-49e4-acd6-1f037733f5f3@googlegroups.com> Subject: Sortowanie bąbelkowe From: Maciej Sobczak <see.my.homepage@gmail.com> Injection-Date: Thu, 22 Aug 2019 08:57:39 +0000 X-Received-Bytes: 3926 X-Received-Body-CRC: 2041603032 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit