資訊內(nèi)容
C++結(jié)合Scratch學(xué)習(xí)排序之冒泡排序
冒泡排序
冒泡排序是一個(gè)比較經(jīng)典和簡(jiǎn)單的排序算法,利用Scratch編程,我們可以比較清楚的、直觀的觀看排序的過程,同時(shí)也便于理解算法本身。
??? 什么是冒泡排序呢?把第一個(gè)元素與第二個(gè)元素比較,如果第一個(gè)比第二個(gè)大,則交換他們的位置。接著繼續(xù)比較第二個(gè)與第三個(gè)元素,如果第二個(gè)比第三個(gè)大,則交換他們的位置……(你看那水中的魚,他們時(shí)不時(shí)地吐出泡泡,那泡泡越往上走就會(huì)越大)。我們對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì),這樣一趟比較交換下來之后,排在最右的元素就會(huì)是最大的數(shù)。除去最右的元素,我們對(duì)剩余的元素做同樣的工作,如此重復(fù)下去,直到排序完成。
比如9,5,6,8,2,7,3,4,1這組數(shù)據(jù),要將它按照從小到大的順序排列起來。首先想到將第一個(gè)數(shù)A與后面的數(shù)比較如果后面的數(shù)比較大,那么這兩個(gè)數(shù)的順序是正確的。將當(dāng)前A更新成后面較大的數(shù),然后再與后面的比較。遇到比自己小的進(jìn)行交換,但是不更新A。
如例:
1.第一次比較,9是最大的,執(zhí)行后9,5,6,8,2,7,3,4,1
2.第二次比較,5比9小,執(zhí)行后5,9,6,8,2,7,3,4,1
3.第三次比較,6比9小,比5大,執(zhí)行后5,6,9,8,2,7,3,4,1
4.第四次比較,8比9小,比6大,執(zhí)行后5,6,8,9,2,7,3,4,1
5.第五次比較,2比9小,比568都小,執(zhí)行后2,5,6,8,9,7,3,4,1
6.第六次比較,7比89小,比6大,執(zhí)行后2,5,6,7,8,9,3,4,1
7.第七次比較,3比56789小,比2大,執(zhí)行后2,3,5,6,7,8,9,4,1
8.第八次比較,4比56789小,比3大,執(zhí)行后2,3,4,5,6,7,8,9,1
9.第九次比較,1最小,執(zhí)行后1,2,3,4,5,6,7,8,9
C++代碼如下:
#include
using namespace std;
void bubbleSort(int* pData,int length)
{
??? int temp;
??? for(int i =0; i != length; ++i)
??? {
??????? for (intj = 0; j != length; ++j)
??????? {
??????????? if(pData[i] < pData[j])
??????????? {
???????????????temp = pData[i];
???????????????pData[i] = pData[j];
???????????????pData[j] = temp;
??????????? }
??????? }
??? }
}
void print(int* pData,int length)
{
??? for (int i =0; i != length; ++i)
??? {
??????? cout<< pData[i] << " ";
??? }
??? cout <<endl;< p="">
}
int main(){
int pData[] = {9,5,6,8,2,7,3,4,1};
??? ?? bubbleSort(pData,9);
??? ?? cout << "the result is:";
??? ?? print(pData,9);
??? ?? return 0;
}
下面介紹一下用Scratch完成冒泡排序
用Scratch寫這個(gè)程序可以用編程的方式把冒泡算法完美的演示一遍。你可以看到每一步程序的執(zhí)行。排序先從最下面開始,一步一步進(jìn)行交替比較,發(fā)現(xiàn)下面的數(shù)字比上面大,就通過臨時(shí)變量來進(jìn)行數(shù)據(jù)隊(duì)列里面的交換。(隊(duì)列里面的數(shù)據(jù)交換位置需要有臨時(shí)變量來做數(shù)據(jù)交換時(shí)的臨時(shí)存放)。
通過這個(gè)程序,小朋友就可以很容易和直觀的理解冒泡算法。
學(xué)編程,算法是很重要的一部分,也是真正鍛煉思維的部分,所以NOIP的比賽就是考算法,雖然建議算法可以等到上初中再去學(xué),小學(xué)玩玩就好,但是還是可以通過Scratch接觸一些算法的概念會(huì)比較好。否則上初中開始直接用C++做算法會(huì)很吃力的。
今天我們會(huì)介紹兩種scratch實(shí)現(xiàn)的方式:
第一種:
第二種:
大家自己去欣賞程序和代碼吧,畢竟讀懂程序也是編程的一個(gè)基本技能,最好還要?jiǎng)邮謱?shí)踐一下!
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除
