這個作業屬於哪個課程
這個作業要求在**
/homework/11807
這個作業的目標
熟練陣列和排序法
學號20208943
第七章 陣列 7.17.1 輸出所有大於平均值的數
1.學生知道在哪種情況下可以使用構造資料型別—陣列進行資料的處理
2.掌握用一維陣列進行程式設計
3.掌握選擇排序法和二分查詢法2.1 完成pta作業,並給出程式設計題完成截圖(5分)
2.2 題目:快速尋找滿足條件的兩個數
能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值,為了簡化起見,我們假設這個陣列中肯定存在至少一組符合要求的解。
解法一:採用窮舉法,從陣列中任意取出兩個數字,計算兩者之和是否為給定的數字。
解法二:對陣列中的每個數字arr[i]都判別sum-arr[i]是否在陣列中。
解法三:對陣列進行排序,然後使用二分查詢法針對arr[i]查詢sum-arr[i]。
要求:1.根據三種解法給出相應的**,並給出測試資料。(15分)
解法一:
解法二:
解法三:
測試資料:
2.請說明三種演算法的區別是什麼?你還可以給出更好的演算法嗎?(10分)
解法一:難度不大但效率不高,複雜度很高,相當於第二種和第三種都更複雜,所佔位元組空間也更大。
解法二:解法二在解法一的基礎上有所更變,而且效率相對更快一點,總體來說還是和第一題相差不大。
解法三:將陣列按一定順序排序後從首尾向中間尋找,與前兩種相比大幅度降低了複雜度。
2.3 請搜尋有哪些排序演算法,並用自己的理解對集中排序演算法分別進行描述(5分)
氣泡排序法:比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。
公升級版氣泡排序法:通過從低到高選出最大的數放到後面,再從高到低選出最小的數放到前面,如此反覆,直到左邊界和右邊界重合。當陣列中有已排序好的數時,這種排序比傳統氣泡排序效能稍好。
直接插入排序:和交換排序不同的是它不用進行交換操作,而是用乙個臨時變數儲存當前值。當前面的元素比後面大時,先把後面的元素存入臨時變數,前面元素的值放到後面元素位置,再到最後把其值插入到合適的陣列位置。
希爾(shell)排序:在直接插入排序的思想下設定乙個最小增量dk,剛開始dk設定為n/2。進行插入排序,隨後再讓dk=dk/2,再進行插入排序,直到dk為1時完成最後一次插入排序,此時陣列完成排序。
選擇排序:依次選出陣列最小的數放到陣列的前面。首先從陣列的第二個元素開始往後遍歷,找出最小的數放到第乙個位置。再從剩下陣列中找出最小的數放到第二個位置。以此類推,直到陣列有序。
1 學習進度條(5分)
周/日期
這週所花時間
**行學到的知識點簡介
目前比較困惑的問題
第一周5h
162新知識都很難理解
第二週5h
201排序法和二分查詢法
各種排序綜合運用
2 累積**行和部落格字數
時間**行
部落格字數
3 學習內容總結和感悟(5分)
冒泡法:就是從左到右,相鄰的元素進行比較,每比較一輪就能找到最大的乙個或最小的乙個。進行多輪比較後,最大的或者最小的就浮到前面,從而達到排序目標
C語言 部落格作業02
這個作業屬於哪個課程 c語言程式設計 這個作業要求在 c語言部落格作業02 我在這個課程的目標是 將想法在計算機上表達出來 這個作業在那個具體方面幫助我實現目標 了解計算機語言設計 參考文獻 提問的智慧型 答 提問之前,應該先想想這個問題上自己是否盡力去求解了,如果沒有就先自己嘗試。發問時,要知道你...
C語言 部落格作業02
這個作業屬於哪個課程 c程式語言設計 這個作業要求在 我在這個課程的目標是 學習基礎程式語言c語言,基本掌握c語言的思維方向 這個作業具體在哪個方面幫助我實現目標 程式設計的訓練,markdown的語法練習,編譯器的安裝 參考文獻 markdown語法小結 提問的智慧型 pta系統常見問題解答 mi...
C語言 部落格作業02
問題 答案這個作業屬於哪個課程 c語言程式設計 這個作業要求在 我在這個課程的目標是什麼 學好c語言,打好基礎,可以熟練的打好 和程式設計 這個作業在哪個具體的方面幫助我實現目標 學會了如何提問,對程式設計有了初步的了解,該怎麼樣打 參考文獻 提問的智慧型 pta系統常見問題解答 c語言程式與設計 ...