這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/zswxy/CST2020-2 |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11810 |
這個作業的目標 | <靈活運用數組> |
學號 | <20208976> |
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分)
解法一:
解法二:
解法三:
2.請說明三種算法的區別是什么?你還可以給出更好的算法嗎?(10分)
1.時間復雜度和空間復雜度的不同。
2.效率的不同,第一種雖然簡單,明顯只能應對有限的數據。第三種對起問題更加有力。
目前二分查找法比較好。
2.3 請搜索有哪些排序算法,並用自己的理解對集中排序算法分別進行描述(5分)
1.冒泡排序:重復地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換。
2.選擇排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
3.插入排序:通過構建有序序列,對於未排序數據,在已排序序列中從后向前掃描,找到相應位置並插入。
4.希爾排序:優先比較距離較遠的元素。
5.歸並排序:即先使每個子序列有序,再使子序列段間有序。
6.快速排序:一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。
7.堆排序:利用堆這種數據結構所設計的一種排序算法。
8.計數排序:將輸入的數據值轉化為鍵存儲在額外開辟的數組空間中。
9.基數排序:低位先排序,然后收集;再按照高位排序,然后再收集;依次類推,直到最高位。有時候有些屬性是有優先級順序的,先按低優先級排序,再按高優先級排序。最后的次序就是高優先級高的在前,高優先級相同的低優先級高的在前。
來源於:https://blog.csdn.net/mwj327720862/article/details/80498455
2.4 請給出本周學習總結(15分)
1 學習進度條(5分)
2 累積代碼行和博客字數(5分)
3 學習內容總結和感悟(5分)
感悟:
1.接觸到了新知識,數組能夠方便接觸編程。
2.需要花更多時間去解決編程,不浮躁,沉下心。
3.對題目不能夠游刃有余,需加強練習。
4.冒泡程序;將相鄰的兩個數進行比較,若無大小沖突,則無需進行交換,反之,則進行交換。其最終正確結果一定為最小數為第一位,,最大數為最后一位。
優點:每進行一趟排序,則要進行的排序的數字前的數字不用管,減少了算法量,提高效率。