?

《用排序算法進行數據整理》教學案例

2024-01-09 09:27李學劍
中國信息技術教育 2024年1期
關鍵詞:列表排序次數

李學劍

課程核心素養目標

①根據學習與生活需要,有意識地選用排序算法處理信息,對于簡單問題,確定解決問題的需求和數據,使用排序整理數據,解決問題。(信息意識)

②通過生活中的實例,了解排序算法的原理,對于給定的問題,能將其分解為一系列的實施步驟,使用順序、分支、循環三種基本控制結構簡單描述排序算法實施過程,通過編程驗證該過程。(計算思維)

③通過學習排序算法,體會算法的特征,有意識地將其應用于數字化學習過程中,從多個方面熟悉程序,不要求每個算法問題都自主編程實現,閱讀理解、修改運行等也是有意義的體驗。(數字化學習與創新)

④認識到排序算法對解決生活和學習中問題的重要性,基于對算法價值和局限性的了解,初步具有知識產權保護意識。(信息社會責任)

課程標準要求

①借助學習與生活中的實例,體驗身邊的算法,理解算法是通過明確的、可執行的操作步驟描述的問題求解方案。

②結合生活中的實例,分析簡單算法的執行過程與結果。

③通過真實案例,知道算法步驟的執行次數與問題的規模有關。

④基于給定的算法,能針對不同的輸入數據規模,分別“數出”算法中某些步驟執行的次數。

⑤能基于對算法的理解,設置和調整參數,觀察相應程序的執行。

⑥針對簡單問題,嘗試設計求解算法,并通過程序進行驗證。

教學內容分析

《用排序算法進行數據整理》一課是根據《義務教育信息科技課程標準(2022年版)》(以下簡稱“新課標”)第三學段“身邊的算法”模塊中的學業要求設計的教學案例?!吧磉叺乃惴ā蹦K包括“算法的描述”“算法的執行”“算法的效率”三部分內容,“算法的執行”單元是本模塊的核心,本單元運用順序、選擇和循環三種基本控制結構及其組合,進行問題求解的算法實現。

單元整體實施——①算法基礎:順序結構、選擇結構、循環結構。②常見算法:枚舉算法、迭代算法、排序算法。通過學習,學生能熟悉常用算法的基本思想,理解算法執行的流程,了解利用算法求解簡單問題的基本方式,培養學生初步運用算法思維的習慣,并通過實踐形成設計與分析簡單算法的能力,用算法求解簡單的問題。

本課主要學習冒泡排序算法,排序算法是使用頻率最高的算法之一,冒泡排序是其中一種很典型且相對簡單的方法。本課要求學生在理解冒泡排序過程的同時,能夠運用冒泡排序算法解決實際問題,體會到排序算法在生活中的應用。

學情分析

本課授課對象為初一學生,學生對本節排序中需要的循環結構語句、條件判斷語句及列表變量的使用方法都已有基礎,同時在生活中排序和排隊的體驗很多,對于排序算法的實現有認知關聯,只是還沒上升到理論層次。冒泡排序算法理論性比較強,但學生前面已經學習了枚舉算法和迭代算法,初步建立了算法思維,為學習冒泡排序算法奠定了基礎。

教學目標

1.單元學習目標

①結合生活中的實例,了解算法的順序、分支和循環三種基本控制結構,能分析簡單算法的執行過程與結果。②通過真實案例,知道算法步驟的執行次數,基于給定的算法,能針對不同的輸入數據規模,分別“數出”算法中某些步驟執行的次數。③能基于對算法的理解,設置和調整參數,補充程序代碼,觀察算法的運行原理。④面對生活實例,嘗試設計求解算法,并通過程序進行驗證,解決簡單的實際問題。

2.本課學習目標

①理解冒泡排序算法的基本原理,能數出冒泡排序的輪次和每輪對比的次數。②使用循環語句和條件判斷語句編程實現冒泡排序代碼。③能運用冒泡排序進行數據整理,解決簡單的實際問題。

教學重難點

重點:冒泡排序內外循環范圍的確定和條件判斷交換相鄰數據。

難點:靈活運用冒泡排序算法整理數據解決實際問題。

教學過程

1.情境引入,看視頻找不同

師:學習新課前我們先來觀看兩個視頻,它們分別是同學們在學校餐廳就餐和上體育課時拍攝的,觀察這兩個視頻中隊列的身高各有什么特點。

學生活動:觀看視頻,找出視頻中兩個隊列的身高特點——餐廳就餐隊列身高參差不齊,體育課隊列從矮到高有序排列。(引出問題:怎樣有序排隊?)

設計意圖:新課標倡導真實性學習,注重創設真實情境。從學生身邊具體事例“餐廳就餐隊列”和“體育課隊列”導入,激發學生的學習興趣,提高學生的學習參與度。

2.項目分析,認識冒泡排序

師:我們平時怎樣讓隊形有序排列?(教師請6位學生進行演示)同學們觀察,我們在排隊的時候需要進行怎樣的比較和移動。要讓這6位同學按照從矮到高的順序排列,首先我們進行第1輪比較,先比較前兩個同學,大家看一下誰高,他們需不需要調換一下位置(生答),這里第1輪比較進行了第一次對比。然后我們再看第二個同學和第三個同學,需不需要交換,這是第幾次對比?(重復兩兩對比)第1輪排序結束,大家數一數,第1輪一共有幾位同學參加了排序?6位同學都參加了,一共比較了幾次?(4次)第1輪比較完成后已經把隊伍里最高的同學排在隊尾,前面這4位同學還是無序的,我們現在進行第2輪比較。重復上述比較過程,直至6位同學按順序排列后結束。

學生活動:在觀看同學演示排列的同時填寫統計表(如下表)。

師:剛才幾位同學進行了幾輪比較?(6位同學進行了5輪比較)大家思考一下,如果10位同學需要幾輪比較?20位同學呢?我們是否能從其中尋找到某種規律呢?(排序需要的輪次為總人數-1,如果將同學們的身高數值作為數據,排序的輪次是數據個數減一個)從統計表的第二行我們可以看出,參與排隊的人數隨著輪次的增加而依次減少,再看第一行和第三行,輪次和每輪對比的次數有什么規律?1-5、2-4、3-3、4-2、5-1,它們的和都是6,也就是排隊的總人數即排序的總數據個數。

學生活動:總結出排序的輪次公式(數據個數-1)、每輪對比次數公式(數據個數-輪次)。

師:從這兩個公式中我們可以看出,要用這種方式實現排序需要兩重循環,一重循環是比較的輪次,另一重循環是每輪對比次數,這兩個公式也分別是兩重循環的范圍。我們現在可以歸納出這種排序的基本思路:從前向后不斷比較相鄰數據,如果前面的數比后面的數大則進行交換,重復該過程,直到所有數據都有序排列才停止這個過程。越小的數據會經由交換慢慢“浮”到數列的頂端,所以我們把它叫做冒泡排序。它的核心思想可以概括為:兩兩比較,大值移后。

設計意圖:新課標學業要求指出,基于給定的算法,能針對不同的輸入數據規模,分別“數出”算法中某些步驟執行的次數。通過觀看同學排序演示過程,學生能自主數出其中比較的輪次和每輪對比的次數,在教師的引導下總結出輪次公式和每輪對比次數公式,理解冒泡排序的算法原理。

3.項目探究,體驗冒泡排序的過程

師:演示排隊的6位同學,他們的身高數據可以使用一個列表進行存儲,這個列表中有幾個元素?(6個元素)將一組數據存儲到列表,可以用len()函數獲取列表中的元素個數。

學生活動:結合排隊同學的身高數據實例,新建一個列表存儲,并用len()函數返回列表中數據元素的個數值。

師:不同于本單元學習過的枚舉算法和迭代算法,冒泡排序有固定格式的核心代碼,它的核心代碼有4行,下面我們結合前面的例子分析冒泡排序的代碼。剛才這6位同學排隊的過程,一共經歷了幾重循環?(兩重循環)我們將排隊同學的身高數據存于列表s中,首先用變量k來表示比較的輪次,這是外循環,輪次等于數據個數-1,外循環range函數范圍為0至len(s)-1。然后在每一輪次內我們再定義一個變量i,作為每輪比較的對比次數.這是內循環,它的計數范圍使用每輪對比次數公式:數據個數-輪次。因為外循環的輪次是從0開始計數的,這一輪次也要減去,內循環range函數范圍為0至len(s)-k-1。用if條件表達式判斷相鄰兩個元素的大小,如果第一個數比第二個大,就進行交換。交換是采用Python中的多元賦值直接交換列表中相鄰兩個數的位置。

學生活動:思考練習,體驗冒泡排序的運行過程,打開“身高排序”程序,參考冒泡排序的4行核心代碼,將前面排隊同學的身高數據由小到大進行排序,把程序代碼補充完整,并運行觀察每輪的比較結果,體會冒泡排序算法原理。為了更好地理解算法原理,在每一輪比較結束后print輸出該輪的比較結果,算法結束后再輸出最終排序結果。程序代碼如圖1所示。

師:觀察運行結果,我們發現每一輪比較都將本輪最大數排在本輪最后,第1輪最大數162排在最后,第2輪第二大的數157排在倒數第二位,依此類推,第5輪最小數136排在最前,有n個數據就需要n-1輪比較。

小組合作探究,如果把身高數據改為降序排列,怎樣修改程序代碼?

學生活動:小組討論降序與升序代碼的異同,完成代碼的修改,運行驗證排序結果是否正確。

師:降序和升序的循環范圍是一樣的,升序中如果前一個數比后一個大就進行交換,降序則相反,前一個數比后一個小就進行交換,if條件表達式中的關系運算符應該為小于,數據交換時同樣使用多元賦值(如下頁圖2)。

設計意圖:新課標內容要求提出,結合生活中的實例,了解算法的順序、分支和循環三種基本控制結構,能分析簡單算法的執行過程與結果。同時,新課標學業要求也指出,能基于對算法的理解,設置和調整參數,觀察相應程序的執行。學生在思考練習中完成程序的代碼補充,得出排序結果,通過觀察每輪的比較結果,分析冒泡排序的運行過程。在理解冒泡排序算法原理的基礎上,修改程序代碼把數據改為降序排列,比較降序與升序代碼的異同。

4.項目延伸,拓展與提升

師:增強體質有很多體育鍛煉方式,學校準備開展問卷調查,讓大家給最喜歡的鍛煉方式投票,然后依據投票結果安排學校的課間活動,請將問卷調查中同學們最喜歡的體育鍛煉方式進行排名。思考:如何保證票數和鍛煉方式同步交換?

學生活動:小組討論,打開“問卷調查”程序,將程序補充完整并運行,觀察驗證運行結果。

師:“問卷調查”程序中用了兩個列表分別存放票數和鍛煉方式,票數和鍛煉方式在列表中的位置是一一對應的,當我們交換了m列表的票數位置時,同時交換n列表中鍛煉方式的位置,就可以保證二者同步交換。程序代碼如圖3所示。

設計意圖:新課標內容要求提到,針對簡單問題,嘗試設計求解算法,并通過程序進行驗證。學生面對簡單的數據整理問題,將“問卷調查”程序補充完整,找到票數和鍛煉方式同步交換的方法,通過程序驗證提升完成簡單算法的能力。

5.交流與總結

(1)交流問答

師:通過今天的學習,你有哪些收獲呢?①我們今天學習了用(冒泡排序)算法整理數據,它的核心代碼有(兩)重循環;②外循環范圍的比較輪次公式是“數據個數-1”,內循環范圍的每輪對比次數公式是“數據個數-輪次”;③升序時前一個數據比后一個數據(大)則進行交換,降序時前一個數據比后一個數據(?。﹦t進行交換。

(2)知識梳理

冒泡排序核心思想:兩兩比較,大值移后。①外循環限定比較的輪次;②內循環控制每輪比較次數;③條件判斷是否交換賦值。

教學反思

本節課以真實問題驅動,從學生身邊具體事例“排隊”導入,激發了學生的學習興趣,引導學生分析冒泡排序中數據個數、比較的輪次、每輪對比次數之間的關系。體驗用算法的思想方式界定問題、分析問題、組織數據、制訂問題解決方案,并對其進行優化,使用冒泡排序算法實現生活中實際問題的求解。

從教學效果來看,本課落實了項目式學習的理念,從冒泡排序的算法思想出發,讓學生體驗冒泡排序的算法執行,從而理解冒泡排序算法原理,算法程序實現達成度較高。課堂中學生通過觀看演示排序過程得出比較的輪次和每輪對比的次數,在教師的引導下能總結出輪次公式和每輪對比次數公式。學生能理解4行核心代碼,在思考練習中完成了“身高排序”程序的代碼補充,得出排序結果,并通過觀察每輪的比較結果,理解冒泡排序算法原理。學生能將“問卷調查”程序補充完整,找到票數和鍛煉方式同步交換的方法。整節課通過項目分析、項目探究、項目延伸三個過程,引導學生自主學習、合作探究,從解決生活中的實際問題出發,激發了學生學習興趣,使學生形成積極主動學習的態度,培養了使用算法解決生活中實際問題的能力,提升了信息科技核心素養。

點評

算法作為信息技術/信息科技教學的核心內容之一,具有極強的基于數理邏輯的事例構架、數據分析與問題解決應用的需求。純粹地根據現象進行算法描述,可能存在紙上談兵式的膚淺認知瓶頸,長此以往對計算思維的深度學習是有傷害的。本課突破了這個瓶頸,即把算法基于數據整理,聚焦于具體生活應用——排隊,通過對無序與有序的對比、有序數據的整理與技術應用的數據觀察與算法總結,很明確地把冒泡排序的原理、過程與效果進行了全面學習與總結,對排序算法的認知較順利地在動手實踐中完成了,并拓展到對問卷數據的排序及相關數據的同步交換等,樹立起算法要多樣化設計來針對性地解決不同的問題的觀念。當然,由于排序算法還有插入排序、快速排序、桶排序等多種算法可供選擇,在效率方面如果能夠引導學生去對比,開拓他們的視野會讓算法學習的內涵更豐富。另外,對于本課中體育問卷相關數據的排序,如果給出同一個二維復雜列表的關系數據進行關鍵字排序的方案,也能為學生提供計算思維中“迭代”思維的培育與啟蒙。

(點評人:山東省青州一中信息技術特級教師? 王愛勝)

猜你喜歡
列表排序次數
排序不等式
機場航站樓年雷擊次數計算
2020年,我國汽車召回次數同比減少10.8%,召回數量同比增長3.9%
學習運用列表法
一類無界算子的二次數值域和譜
擴列吧
恐怖排序
節日排序
依據“次數”求概率
列表畫樹狀圖各有所長
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合