資訊內容
用Scratch實現冒泡法排序—讓你的魚缸冒泡泡吧
排序的方法有很多種,今天介紹一下“冒泡法”排序。
冒泡法排序的原理:對相鄰的元素進行兩兩比較,順序相反則進行交換。這樣,每一次會將最小或最大的元素“浮”到頂端,最終達到完全有序。
具體可參見上面的圖示。下面用Scratch進行實現。
程序實現:下圖是排序算法部分。
本例只對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中只有列表,所以只能通過下標,一個個的訪問。
?“交換”部分程序如下:
難點三:如何交換兩個數據?
在程序中,兩個變量必須通過第三個變量才能實現交換。因為在大部分編程語言中,等號的含義是“賦值”。
所以有的編程語言為了進行區分,將賦值號寫成“:=”的形式。例如:
其含義是將100這個值賦予變量a。
因此直接寫成下列形式,是不能交換變量a和b的值的:
執行第一條語句時,將變量b的值賦予了變量a,這時變量a的值已經等于變量b了。所以執行第二條語句時,只是再一次把值賦予變量b。變量a的值丟失了。
通常采用中間變量來實現交換。例如:
這里temp就是中間變量。注意其中的次序不能搞錯。
完整的視頻如下所示:
后記:在利用冒泡法排序時,如果某次循環中沒有發生交換,說明所有數據都已經排好了順序。這時可以中止循環,直接宣布排序結束。通常的做法是設置一個標志變量flag。開始時設置flag=0;當可以提前中止時,設置flag=1。Scratch語言中沒有break等中斷循環的命令,一般是設置一個快速變量。這樣條件判斷部分就變得稍微復雜一些。
下面是跟算法無關的一些內容,只是為了讓程序更有趣:
1、按住“R”鍵可以重置需要排序的序列。新的序列是隨機生成的。再次按“空格”鍵可以開始排序;
2、設計了一條小魚可以提供各種信息,例如“排序結束”等。為了讓我們的泡泡魚缸更生動形象,小魚會在魚缸中“漫步”。
3、為了更直觀的展示排序過程,對5個小球進行了編號。編號可以去掉,排序的泡泡也可以換成你希望的物品哦。
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
