C語言II博客作業02


這個作業屬於哪個課程 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.冒泡程序;將相鄰的兩個數進行比較,若無大小沖突,則無需進行交換,反之,則進行交換。其最終正確結果一定為最小數為第一位,,最大數為最后一位。
優點:每進行一趟排序,則要進行的排序的數字前的數字不用管,減少了算法量,提高效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM