李學劍
課程核心素養(yǎng)目標
①根據(jù)學習與生活需要,有意識地選用排序算法處理信息,對于簡單問題,確定解決問題的需求和數(shù)據(jù),使用排序整理數(shù)據(jù),解決問題。(信息意識)
②通過生活中的實例,了解排序算法的原理,對于給定的問題,能將其分解為一系列的實施步驟,使用順序、分支、循環(huán)三種基本控制結(jié)構(gòu)簡單描述排序算法實施過程,通過編程驗證該過程。(計算思維)
③通過學習排序算法,體會算法的特征,有意識地將其應用于數(shù)字化學習過程中,從多個方面熟悉程序,不要求每個算法問題都自主編程實現(xiàn),閱讀理解、修改運行等也是有意義的體驗。(數(shù)字化學習與創(chuàng)新)
④認識到排序算法對解決生活和學習中問題的重要性,基于對算法價值和局限性的了解,初步具有知識產(chǎn)權保護意識。(信息社會責任)
課程標準要求
①借助學習與生活中的實例,體驗身邊的算法,理解算法是通過明確的、可執(zhí)行的操作步驟描述的問題求解方案。
②結(jié)合生活中的實例,分析簡單算法的執(zhí)行過程與結(jié)果。
③通過真實案例,知道算法步驟的執(zhí)行次數(shù)與問題的規(guī)模有關。
④基于給定的算法,能針對不同的輸入數(shù)據(jù)規(guī)模,分別“數(shù)出”算法中某些步驟執(zhí)行的次數(shù)。
⑤能基于對算法的理解,設置和調(diào)整參數(shù),觀察相應程序的執(zhí)行。
⑥針對簡單問題,嘗試設計求解算法,并通過程序進行驗證。
教學內(nèi)容分析
《用排序算法進行數(shù)據(jù)整理》一課是根據(jù)《義務教育信息科技課程標準(2022年版)》(以下簡稱“新課標”)第三學段“身邊的算法”模塊中的學業(yè)要求設計的教學案例?!吧磉叺乃惴ā蹦K包括“算法的描述”“算法的執(zhí)行”“算法的效率”三部分內(nèi)容,“算法的執(zhí)行”單元是本模塊的核心,本單元運用順序、選擇和循環(huán)三種基本控制結(jié)構(gòu)及其組合,進行問題求解的算法實現(xiàn)。
單元整體實施——①算法基礎:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。②常見算法:枚舉算法、迭代算法、排序算法。通過學習,學生能熟悉常用算法的基本思想,理解算法執(zhí)行的流程,了解利用算法求解簡單問題的基本方式,培養(yǎng)學生初步運用算法思維的習慣,并通過實踐形成設計與分析簡單算法的能力,用算法求解簡單的問題。
本課主要學習冒泡排序算法,排序算法是使用頻率最高的算法之一,冒泡排序是其中一種很典型且相對簡單的方法。本課要求學生在理解冒泡排序過程的同時,能夠運用冒泡排序算法解決實際問題,體會到排序算法在生活中的應用。
學情分析
本課授課對象為初一學生,學生對本節(jié)排序中需要的循環(huán)結(jié)構(gòu)語句、條件判斷語句及列表變量的使用方法都已有基礎,同時在生活中排序和排隊的體驗很多,對于排序算法的實現(xiàn)有認知關聯(lián),只是還沒上升到理論層次。冒泡排序算法理論性比較強,但學生前面已經(jīng)學習了枚舉算法和迭代算法,初步建立了算法思維,為學習冒泡排序算法奠定了基礎。
教學目標
1.單元學習目標
①結(jié)合生活中的實例,了解算法的順序、分支和循環(huán)三種基本控制結(jié)構(gòu),能分析簡單算法的執(zhí)行過程與結(jié)果。②通過真實案例,知道算法步驟的執(zhí)行次數(shù),基于給定的算法,能針對不同的輸入數(shù)據(jù)規(guī)模,分別“數(shù)出”算法中某些步驟執(zhí)行的次數(shù)。③能基于對算法的理解,設置和調(diào)整參數(shù),補充程序代碼,觀察算法的運行原理。④面對生活實例,嘗試設計求解算法,并通過程序進行驗證,解決簡單的實際問題。
2.本課學習目標
①理解冒泡排序算法的基本原理,能數(shù)出冒泡排序的輪次和每輪對比的次數(shù)。②使用循環(huán)語句和條件判斷語句編程實現(xiàn)冒泡排序代碼。③能運用冒泡排序進行數(shù)據(jù)整理,解決簡單的實際問題。
教學重難點
重點:冒泡排序內(nèi)外循環(huán)范圍的確定和條件判斷交換相鄰數(shù)據(jù)。
難點:靈活運用冒泡排序算法整理數(shù)據(jù)解決實際問題。
教學過程
1.情境引入,看視頻找不同
師:學習新課前我們先來觀看兩個視頻,它們分別是同學們在學校餐廳就餐和上體育課時拍攝的,觀察這兩個視頻中隊列的身高各有什么特點。
學生活動:觀看視頻,找出視頻中兩個隊列的身高特點——餐廳就餐隊列身高參差不齊,體育課隊列從矮到高有序排列。(引出問題:怎樣有序排隊?)
設計意圖:新課標倡導真實性學習,注重創(chuàng)設真實情境。從學生身邊具體事例“餐廳就餐隊列”和“體育課隊列”導入,激發(fā)學生的學習興趣,提高學生的學習參與度。
2.項目分析,認識冒泡排序
師:我們平時怎樣讓隊形有序排列?(教師請6位學生進行演示)同學們觀察,我們在排隊的時候需要進行怎樣的比較和移動。要讓這6位同學按照從矮到高的順序排列,首先我們進行第1輪比較,先比較前兩個同學,大家看一下誰高,他們需不需要調(diào)換一下位置(生答),這里第1輪比較進行了第一次對比。然后我們再看第二個同學和第三個同學,需不需要交換,這是第幾次對比?(重復兩兩對比)第1輪排序結(jié)束,大家數(shù)一數(shù),第1輪一共有幾位同學參加了排序?6位同學都參加了,一共比較了幾次?(4次)第1輪比較完成后已經(jīng)把隊伍里最高的同學排在隊尾,前面這4位同學還是無序的,我們現(xiàn)在進行第2輪比較。重復上述比較過程,直至6位同學按順序排列后結(jié)束。
學生活動:在觀看同學演示排列的同時填寫統(tǒng)計表(如下表)。
師:剛才幾位同學進行了幾輪比較?(6位同學進行了5輪比較)大家思考一下,如果10位同學需要幾輪比較?20位同學呢?我們是否能從其中尋找到某種規(guī)律呢?(排序需要的輪次為總?cè)藬?shù)-1,如果將同學們的身高數(shù)值作為數(shù)據(jù),排序的輪次是數(shù)據(jù)個數(shù)減一個)從統(tǒng)計表的第二行我們可以看出,參與排隊的人數(shù)隨著輪次的增加而依次減少,再看第一行和第三行,輪次和每輪對比的次數(shù)有什么規(guī)律?1-5、2-4、3-3、4-2、5-1,它們的和都是6,也就是排隊的總?cè)藬?shù)即排序的總數(shù)據(jù)個數(shù)。
學生活動:總結(jié)出排序的輪次公式(數(shù)據(jù)個數(shù)-1)、每輪對比次數(shù)公式(數(shù)據(jù)個數(shù)-輪次)。
師:從這兩個公式中我們可以看出,要用這種方式實現(xiàn)排序需要兩重循環(huán),一重循環(huán)是比較的輪次,另一重循環(huán)是每輪對比次數(shù),這兩個公式也分別是兩重循環(huán)的范圍。我們現(xiàn)在可以歸納出這種排序的基本思路:從前向后不斷比較相鄰數(shù)據(jù),如果前面的數(shù)比后面的數(shù)大則進行交換,重復該過程,直到所有數(shù)據(jù)都有序排列才停止這個過程。越小的數(shù)據(jù)會經(jīng)由交換慢慢“浮”到數(shù)列的頂端,所以我們把它叫做冒泡排序。它的核心思想可以概括為:兩兩比較,大值移后。
設計意圖:新課標學業(yè)要求指出,基于給定的算法,能針對不同的輸入數(shù)據(jù)規(guī)模,分別“數(shù)出”算法中某些步驟執(zhí)行的次數(shù)。通過觀看同學排序演示過程,學生能自主數(shù)出其中比較的輪次和每輪對比的次數(shù),在教師的引導下總結(jié)出輪次公式和每輪對比次數(shù)公式,理解冒泡排序的算法原理。
3.項目探究,體驗冒泡排序的過程
師:演示排隊的6位同學,他們的身高數(shù)據(jù)可以使用一個列表進行存儲,這個列表中有幾個元素?(6個元素)將一組數(shù)據(jù)存儲到列表,可以用len()函數(shù)獲取列表中的元素個數(shù)。
學生活動:結(jié)合排隊同學的身高數(shù)據(jù)實例,新建一個列表存儲,并用len()函數(shù)返回列表中數(shù)據(jù)元素的個數(shù)值。
師:不同于本單元學習過的枚舉算法和迭代算法,冒泡排序有固定格式的核心代碼,它的核心代碼有4行,下面我們結(jié)合前面的例子分析冒泡排序的代碼。剛才這6位同學排隊的過程,一共經(jīng)歷了幾重循環(huán)?(兩重循環(huán))我們將排隊同學的身高數(shù)據(jù)存于列表s中,首先用變量k來表示比較的輪次,這是外循環(huán),輪次等于數(shù)據(jù)個數(shù)-1,外循環(huán)range函數(shù)范圍為0至len(s)-1。然后在每一輪次內(nèi)我們再定義一個變量i,作為每輪比較的對比次數(shù).這是內(nèi)循環(huán),它的計數(shù)范圍使用每輪對比次數(shù)公式:數(shù)據(jù)個數(shù)-輪次。因為外循環(huán)的輪次是從0開始計數(shù)的,這一輪次也要減去,內(nèi)循環(huán)range函數(shù)范圍為0至len(s)-k-1。用if條件表達式判斷相鄰兩個元素的大小,如果第一個數(shù)比第二個大,就進行交換。交換是采用Python中的多元賦值直接交換列表中相鄰兩個數(shù)的位置。
學生活動:思考練習,體驗冒泡排序的運行過程,打開“身高排序”程序,參考冒泡排序的4行核心代碼,將前面排隊同學的身高數(shù)據(jù)由小到大進行排序,把程序代碼補充完整,并運行觀察每輪的比較結(jié)果,體會冒泡排序算法原理。為了更好地理解算法原理,在每一輪比較結(jié)束后print輸出該輪的比較結(jié)果,算法結(jié)束后再輸出最終排序結(jié)果。程序代碼如圖1所示。
師:觀察運行結(jié)果,我們發(fā)現(xiàn)每一輪比較都將本輪最大數(shù)排在本輪最后,第1輪最大數(shù)162排在最后,第2輪第二大的數(shù)157排在倒數(shù)第二位,依此類推,第5輪最小數(shù)136排在最前,有n個數(shù)據(jù)就需要n-1輪比較。
小組合作探究,如果把身高數(shù)據(jù)改為降序排列,怎樣修改程序代碼?
學生活動:小組討論降序與升序代碼的異同,完成代碼的修改,運行驗證排序結(jié)果是否正確。
師:降序和升序的循環(huán)范圍是一樣的,升序中如果前一個數(shù)比后一個大就進行交換,降序則相反,前一個數(shù)比后一個小就進行交換,if條件表達式中的關系運算符應該為小于,數(shù)據(jù)交換時同樣使用多元賦值(如下頁圖2)。
設計意圖:新課標內(nèi)容要求提出,結(jié)合生活中的實例,了解算法的順序、分支和循環(huán)三種基本控制結(jié)構(gòu),能分析簡單算法的執(zhí)行過程與結(jié)果。同時,新課標學業(yè)要求也指出,能基于對算法的理解,設置和調(diào)整參數(shù),觀察相應程序的執(zhí)行。學生在思考練習中完成程序的代碼補充,得出排序結(jié)果,通過觀察每輪的比較結(jié)果,分析冒泡排序的運行過程。在理解冒泡排序算法原理的基礎上,修改程序代碼把數(shù)據(jù)改為降序排列,比較降序與升序代碼的異同。
4.項目延伸,拓展與提升
師:增強體質(zhì)有很多體育鍛煉方式,學校準備開展問卷調(diào)查,讓大家給最喜歡的鍛煉方式投票,然后依據(jù)投票結(jié)果安排學校的課間活動,請將問卷調(diào)查中同學們最喜歡的體育鍛煉方式進行排名。思考:如何保證票數(shù)和鍛煉方式同步交換?
學生活動:小組討論,打開“問卷調(diào)查”程序,將程序補充完整并運行,觀察驗證運行結(jié)果。
師:“問卷調(diào)查”程序中用了兩個列表分別存放票數(shù)和鍛煉方式,票數(shù)和鍛煉方式在列表中的位置是一一對應的,當我們交換了m列表的票數(shù)位置時,同時交換n列表中鍛煉方式的位置,就可以保證二者同步交換。程序代碼如圖3所示。
設計意圖:新課標內(nèi)容要求提到,針對簡單問題,嘗試設計求解算法,并通過程序進行驗證。學生面對簡單的數(shù)據(jù)整理問題,將“問卷調(diào)查”程序補充完整,找到票數(shù)和鍛煉方式同步交換的方法,通過程序驗證提升完成簡單算法的能力。
5.交流與總結(jié)
(1)交流問答
師:通過今天的學習,你有哪些收獲呢?①我們今天學習了用(冒泡排序)算法整理數(shù)據(jù),它的核心代碼有(兩)重循環(huán);②外循環(huán)范圍的比較輪次公式是“數(shù)據(jù)個數(shù)-1”,內(nèi)循環(huán)范圍的每輪對比次數(shù)公式是“數(shù)據(jù)個數(shù)-輪次”;③升序時前一個數(shù)據(jù)比后一個數(shù)據(jù)(大)則進行交換,降序時前一個數(shù)據(jù)比后一個數(shù)據(jù)(?。﹦t進行交換。
(2)知識梳理
冒泡排序核心思想:兩兩比較,大值移后。①外循環(huán)限定比較的輪次;②內(nèi)循環(huán)控制每輪比較次數(shù);③條件判斷是否交換賦值。
教學反思
本節(jié)課以真實問題驅(qū)動,從學生身邊具體事例“排隊”導入,激發(fā)了學生的學習興趣,引導學生分析冒泡排序中數(shù)據(jù)個數(shù)、比較的輪次、每輪對比次數(shù)之間的關系。體驗用算法的思想方式界定問題、分析問題、組織數(shù)據(jù)、制訂問題解決方案,并對其進行優(yōu)化,使用冒泡排序算法實現(xiàn)生活中實際問題的求解。
從教學效果來看,本課落實了項目式學習的理念,從冒泡排序的算法思想出發(fā),讓學生體驗冒泡排序的算法執(zhí)行,從而理解冒泡排序算法原理,算法程序?qū)崿F(xiàn)達成度較高。課堂中學生通過觀看演示排序過程得出比較的輪次和每輪對比的次數(shù),在教師的引導下能總結(jié)出輪次公式和每輪對比次數(shù)公式。學生能理解4行核心代碼,在思考練習中完成了“身高排序”程序的代碼補充,得出排序結(jié)果,并通過觀察每輪的比較結(jié)果,理解冒泡排序算法原理。學生能將“問卷調(diào)查”程序補充完整,找到票數(shù)和鍛煉方式同步交換的方法。整節(jié)課通過項目分析、項目探究、項目延伸三個過程,引導學生自主學習、合作探究,從解決生活中的實際問題出發(fā),激發(fā)了學生學習興趣,使學生形成積極主動學習的態(tài)度,培養(yǎng)了使用算法解決生活中實際問題的能力,提升了信息科技核心素養(yǎng)。
點評
算法作為信息技術/信息科技教學的核心內(nèi)容之一,具有極強的基于數(shù)理邏輯的事例構(gòu)架、數(shù)據(jù)分析與問題解決應用的需求。純粹地根據(jù)現(xiàn)象進行算法描述,可能存在紙上談兵式的膚淺認知瓶頸,長此以往對計算思維的深度學習是有傷害的。本課突破了這個瓶頸,即把算法基于數(shù)據(jù)整理,聚焦于具體生活應用——排隊,通過對無序與有序的對比、有序數(shù)據(jù)的整理與技術應用的數(shù)據(jù)觀察與算法總結(jié),很明確地把冒泡排序的原理、過程與效果進行了全面學習與總結(jié),對排序算法的認知較順利地在動手實踐中完成了,并拓展到對問卷數(shù)據(jù)的排序及相關數(shù)據(jù)的同步交換等,樹立起算法要多樣化設計來針對性地解決不同的問題的觀念。當然,由于排序算法還有插入排序、快速排序、桶排序等多種算法可供選擇,在效率方面如果能夠引導學生去對比,開拓他們的視野會讓算法學習的內(nèi)涵更豐富。另外,對于本課中體育問卷相關數(shù)據(jù)的排序,如果給出同一個二維復雜列表的關系數(shù)據(jù)進行關鍵字排序的方案,也能為學生提供計算思維中“迭代”思維的培育與啟蒙。
(點評人:山東省青州一中信息技術特級教師? 王愛勝)