🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215869

Sortowanie bąbelkowe

#215869
From: Maciej Sobczak
Date: Thu, 22 Aug 2019 08:57
68 lines
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-mail

Show 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