国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現(xiàn)在的位置是:首頁 » scratch編程資訊

資訊內(nèi)容

用Scratch實(shí)現(xiàn)冒泡法排序—讓你的魚缸冒泡泡吧

極客小將2021-04-15-

upload/article/images/2021-04-15/b8e2f74dd9c73df9a7306ef261640d28.jpg

排序的方法有很多種,今天介紹一下“冒泡法”排序。

upload/article/images/2021-04-15/4334988a59a54477728e0b177e30f9e4.jpg

冒泡法排序的原理:對相鄰的元素進(jìn)行兩兩比較,順序相反則進(jìn)行交換。這樣,每一次會將最小或最大的元素“浮”到頂端,最終達(dá)到完全有序。

具體可參見上面的圖示。下面用Scratch進(jìn)行實(shí)現(xiàn)。

程序?qū)崿F(xiàn):下圖是排序算法部分。

upload/article/images/2021-04-15/8dad131cc89ee2404aec000d223b5234.jpg

本例只對5個(gè)小球進(jìn)行排序,所以循環(huán)上限是5次。

其中,列表“序號”中存放了需要排序的內(nèi)容。變量i是外循環(huán)計(jì)數(shù),循環(huán)次數(shù)為5;變量j是內(nèi)循環(huán)計(jì)數(shù),循環(huán)次數(shù)是5-i。


難點(diǎn)一:為什么內(nèi)循環(huán)的次數(shù)是5-i?

l? 由于是兩兩進(jìn)行比較,所以第一次比較時(shí),只需要比較4次就可以了。而第一次運(yùn)行時(shí),外循環(huán)變量i=1,所以這時(shí)5-1=4;

l? 第二次執(zhí)行內(nèi)循環(huán)時(shí),由于最大的已經(jīng)冒泡到頂部,只剩下4個(gè)元素。這4個(gè)元素,也只要比較3次就可以。而這時(shí)外循環(huán)變量i=2,剛好5-2=3。后面的依次類推。


難點(diǎn)二:如何引用數(shù)組結(jié)構(gòu)中的元素?

在Scratch中沒有提供“數(shù)組”這種數(shù)據(jù)結(jié)構(gòu),但是提供了“列表”。數(shù)組可以通過列表來實(shí)現(xiàn)。

例如,有數(shù)組A,它有5個(gè)元素。則每個(gè)元素分別為A(1)、A(2)、A(3)、A(4)和A(5)。有的編程語言數(shù)組的下標(biāo)從0開始,有的從1開始。有的編程語言支持對數(shù)組的整體操作,有的只能一個(gè)元素一個(gè)元素的訪問。

Scratch中只有列表,所以只能通過下標(biāo),一個(gè)個(gè)的訪問。


?“交換”部分程序如下:

upload/article/images/2021-04-15/156a417ac14b833864aeb52bf66e555b.jpg

難點(diǎn)三:如何交換兩個(gè)數(shù)據(jù)?

在程序中,兩個(gè)變量必須通過第三個(gè)變量才能實(shí)現(xiàn)交換。因?yàn)樵诖蟛糠志幊陶Z言中,等號的含義是“賦值”。

所以有的編程語言為了進(jìn)行區(qū)分,將賦值號寫成“:=”的形式。例如:

upload/article/images/2021-04-15/bc9c09adbc8009152239dffd5af422c2.jpg

其含義是將100這個(gè)值賦予變量a。

因此直接寫成下列形式,是不能交換變量a和b的值的:

upload/article/images/2021-04-15/730f13b32e9097e9431fa37c6663b9c5.jpg

執(zhí)行第一條語句時(shí),將變量b的值賦予了變量a,這時(shí)變量a的值已經(jīng)等于變量b了。所以執(zhí)行第二條語句時(shí),只是再一次把值賦予變量b。變量a的值丟失了。

通常采用中間變量來實(shí)現(xiàn)交換。例如:

upload/article/images/2021-04-15/9370375687f0bf21f8b11779d36db7d2.jpg

這里temp就是中間變量。注意其中的次序不能搞錯(cuò)。


完整的視頻如下所示:


后記:在利用冒泡法排序時(shí),如果某次循環(huán)中沒有發(fā)生交換,說明所有數(shù)據(jù)都已經(jīng)排好了順序。這時(shí)可以中止循環(huán),直接宣布排序結(jié)束。通常的做法是設(shè)置一個(gè)標(biāo)志變量flag。開始時(shí)設(shè)置flag=0;當(dāng)可以提前中止時(shí),設(shè)置flag=1。Scratch語言中沒有break等中斷循環(huán)的命令,一般是設(shè)置一個(gè)快速變量。這樣條件判斷部分就變得稍微復(fù)雜一些。

下面是跟算法無關(guān)的一些內(nèi)容,只是為了讓程序更有趣:

1、按住“R”鍵可以重置需要排序的序列。新的序列是隨機(jī)生成的。再次按“空格”鍵可以開始排序;

2、設(shè)計(jì)了一條小魚可以提供各種信息,例如“排序結(jié)束”等。為了讓我們的泡泡魚缸更生動(dòng)形象,小魚會在魚缸中“漫步”。

3、為了更直觀的展示排序過程,對5個(gè)小球進(jìn)行了編號。編號可以去掉,排序的泡泡也可以換成你希望的物品哦。

聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除

預(yù)約試聽課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

主站蜘蛛池模板: 双峰县| 稷山县| 东阳市| 合阳县| 乌兰察布市| 镇原县| 上饶县| 外汇| 南漳县| 监利县| 永仁县| 安龙县| 阜新| 呈贡县| 昌平区| 利辛县| 宜阳县| 龙泉市| 松原市| 祁东县| 定远县| 棋牌| 神木县| 府谷县| 沛县| 南华县| 安泽县| 永平县| 梁河县| 乐都县| 丹巴县| 博白县| 英吉沙县| 隆德县| 孟津县| 富民县| 克什克腾旗| 曲靖市| 杭锦旗| 黄石市| 塘沽区|