這個作業屬於哪個課程 | c語言程序設計 |
---|---|
這個作業要求在哪里 | 作業要求 |
這個作業的目標 | 學生知道在哪種情況下可以使用構造數據類型—數組進行數據的處理,掌握用一維數組進行編程, 掌握選擇排序法和二分查找法 |
學號 | 20208983 |
一、本周教學內容&目標
第七章 數組 7.17.1 輸出所有大於平均值的數
1.學生知道在哪種情況下可以使用構造數據類型—數組進行數據的處理
2.掌握用一維數組進行編程
3.掌握選擇排序法和二分查找法
二、本周作業(總分:50分)
2.1 完成PTA作業,並給出編程題完成截圖(5分)
7-1 年齡與疾病 (10 分)
某醫院想統計一下某項疾病的獲得與否與年齡是否有關,需要對以前的診斷記錄進行整理,按照0-18、19-35、36-60、61以上(含61)四個年齡段統計的患病人數占總患病人數的比例。
7-2 選擇排序法 (100 分)
在主函數中首先輸入一個整數N(1<N<=100),然后再輸入N個整數存入數組中,然后用選擇排序法對數組中的N個元素從大到小排序,最后輸出數組所有元素。
2.2 題目:快速尋找滿足條件的兩個數
能否快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值,為了簡化起見,我們假設這個數組中肯定存在至少一組符合要求的解。
解法一:采用窮舉法,從數組中任意取出兩個數字,計算兩者之和是否為給定的數字。
解法二:對數組中的每個數字arr[i]都判別Sum-arr[i]是否在數組中。
解法三:對數組進行排序,然后使用二分查找法針對arr[i]查找Sum-arr[i]。
要求:
1.根據三種解法給出相應的代碼,並給出測試數據。(15分)
解法一:
輸入 | 輸出 | 輸出 |
---|---|---|
7 | 1 | 6 |
2 | 5 | |
3 | 4 |
解法二:
輸入 | 輸出 | 輸出 |
---|---|---|
10 | 1 | 9 |
2 | 8 | |
3 | 7 | |
4 | 6 |
解法三:
輸入 | 輸出 | 輸出 |
---|---|---|
7, 1 3 2 6 4 5 9 7 8 10 | 3 | 4 |
2 | 5 | |
6 | 1 | |
4 | 3 |
2.請說明三種算法的區別是什么?你還可以給出更好的算法嗎?(10分)
區別:
解法一代碼比較簡單,需要將數組中每個數兩兩與給定值去比較,判斷兩個值之和是否為給定值。
解法二代碼較復雜,需要用給定值減去數組中的其中一個,再將所得的值去和剩下的值比較。
解法三用到了二分查找法和排序法,先要將數組中的數排序,然后再用二分查找法找到滿足條件的數組元素,縮小了比較的范圍,提高了運算效率。
更好的代碼:以現在掌握的知識,還無法給出更好的算法
2.3 請搜索有哪些排序算法,並用自己的理解對集中排序算法分別進行描述(5分)
插入排序:將待排序的無序數列看成是一個僅含有一個元素的有序數列和一個無序數列,將無序數列中的元素逐次插入到有序數列中,從而獲得最終的有序數列
冒泡排序:在要排序的一組數中,對當前還未排好序的范圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。每一趟排序后的效果都是講沒有沉下去的元素給沉下去。
希爾排序:希爾排序是把記錄按下標的一定量分組,對每組使用直接插入算法排序;
隨着增量逐漸減少,每組包1含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法被終止。
快速排序:快速排序算法的基本思想為分治思想。
先從數列中取出一個數作軸值(基准數)pivot;
根據基准數將數列進行分區,小於基准數的放左邊,大於基准數的放右邊;
重復分區操作,知道各區間只有一個數為止。
2.4 請給出本周學習總結(15分)
1 學習進度條(5分)
日期 | 所花時間 | 代碼行 | 學習內容 | 迷惑點 |
---|---|---|---|---|
第一周3.1——3.7 | 10h | 700行 | 文件的學習與使用 | 無 |
第二周3.8——3.14 | 13h | 800行 | 數組和選擇排序法和二分查找法 | 排序法的運用 |
2 累積代碼行和博客字數(5分)
3 學習內容總結和感悟(5分)
感悟:
1.本周學習了數組,掌握了一點點選擇排序法和二分查找法的知識並且能運用解決一些問題。
2.隨着學習的知識不斷地加深,課前復習變得很重要,這樣才能更好的,更快的去掌握學習的知識,再配合課后復習這樣才能熟練地運用知識去完成作業。
3.在之后的學習中,希望自己能確定自己的目標,制定自己的計划。
冒泡排序
比較相鄰的兩個數,將小數放在前面,大數放在后面。排序過程中總是小數往前放,大數往后放,相當於氣泡往上升,所以稱作冒泡排序。
代碼運行如下: