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

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

用Scratch實現冒泡法排序—讓你的魚缸冒泡泡吧

極客小將2021-04-15-

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

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

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

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

具體可參見上面的圖示。下面用Scratch進行實現。

程序實現:下圖是排序算法部分。

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

本例只對5個小球進行排序,所以循環上限是5次。

其中,列表“序號”中存放了需要排序的內容。變量i是外循環計數,循環次數為5;變量j是內循環計數,循環次數是5-i。


難點一:為什么內循環的次數是5-i?

l? 由于是兩兩進行比較,所以第一次比較時,只需要比較4次就可以了。而第一次運行時,外循環變量i=1,所以這時5-1=4;

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


難點二:如何引用數組結構中的元素?

在Scratch中沒有提供“數組”這種數據結構,但是提供了“列表”。數組可以通過列表來實現。

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

Scratch中只有列表,所以只能通過下標,一個個的訪問。


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

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

難點三:如何交換兩個數據?

在程序中,兩個變量必須通過第三個變量才能實現交換。因為在大部分編程語言中,等號的含義是“賦值”。

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

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

其含義是將100這個值賦予變量a。

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

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

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

通常采用中間變量來實現交換。例如:

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

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


完整的視頻如下所示:


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

下面是跟算法無關的一些內容,只是為了讓程序更有趣:

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

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

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

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

主站蜘蛛池模板: 罗源县| 遂川县| 江油市| 黑龙江省| 武安市| 集贤县| 监利县| 小金县| 巴中市| 汨罗市| 桐庐县| 墨竹工卡县| 兰考县| 内江市| 苏尼特左旗| 台东县| 海口市| 余江县| 临潭县| 朝阳市| 泸溪县| 阜康市| 舞钢市| 双桥区| 两当县| 青浦区| 县级市| 城步| 嘉黎县| 重庆市| 洞头县| 海兴县| 油尖旺区| 金沙县| 监利县| 兴隆县| 都昌县| 屏山县| 满城县| 新巴尔虎右旗| 五家渠市|