C語言 部落格作業02

2022-06-28 04:24:10 字數 2018 閱讀 2894

這個作業屬於哪個課程

這個作業要求在**

/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語言程式與設計 ...