C語言I部落格作業02

2022-07-01 06:33:10 字數 4079 閱讀 7543

這個作業屬於哪個課程

這個作業要求在**

/homework/11822

這個作業的目標

運用陣列解決問題

學號20209167

第七章 陣列 7.17.1 輸出所有大於平均值的數

1.學生知道在哪種情況下可以使用構造資料型別—陣列進行資料的處理

2.掌握用一維陣列進行程式設計

3.掌握選擇排序法和二分查詢法2.1 完成pta作業,並給出程式設計題完成截圖

2.2 題目:快速尋找滿足條件的兩個數

能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值,為了簡化起見,我們假設這個陣列中肯定存在至少一組符合要求的解。

解法一:採用窮舉法,從陣列中任意取出兩個數字,計算兩者之和是否為給定的數字。

解法二:對陣列中的每個數字arr[i]都判別sum-arr[i]是否在陣列中。

解法三:對陣列進行排序,然後使用二分查詢法針對arr[i]查詢sum-arr[i]。

要求:1.根據三種解法給出相應的**,並給出測試資料

2.請說明三種演算法的區別是什麼?你還可以給出更好的演算法嗎?

(1):第一種是窮舉法,通過兩個迴圈找出所有符合條件的每對數。

(2):第二種是通過特定值減去給定陣列中所有元素,得到的元素在乙個新的陣列k中,再找出兩個陣列中相同的元素給到新的乙個陣列z中,

但是有時候相同元素的個數是奇數不能直接輸出,所以還要通過迴圈找出其中相加等於特定值的每對滿足條件的數。

(3):第三種方法是再陣列排好順序後從陣列的兩邊同時找,如果找到的和大於特定值,或小於特定值,則縮短邊界,繼續往下找,找到一對就輸出一對。

2.3 請搜尋有哪些排序演算法,並用自己的理解對集中排序演算法分別進行描述
(1)選擇排序:首先,找到陣列中最小的那個元素,其次,將它和陣列的第乙個元素交換位置(如果第乙個元素就是最小元素那麼它就和自己交換)。其次,在剩下的元素中找到最小的元素,將它與陣列的第二個元素交換位置。如此往復,直到將整個陣列排序。這種方法我們稱之為選擇排序

(2)插入排序:1、從陣列第2個元素開始抽取元素。

2、把它與左邊第乙個元素比較,如果左邊第乙個元素比它大,則繼續與左邊第二個元素比較下去,直到遇到不比它大的元素,然後插到這個元素的右邊。

3、繼續選取第3,4,….n個元素,重複步驟 2 ,選擇適當的位置插入。

(3)氣泡排序:把第乙個元素與第二個元素比較,如果第乙個比第二個大,則交換他們的位置。接著繼續比較第二個與第三個元素,如果第二個比第三個大,則交換他們的位置….

我們對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣一趟比較交換下來之後,排在最右的元素就會是最大的數。

除去最右的元素,我們對剩餘的元素做同樣的工作,如此重複下去,直到排序完成。

(4)希爾排序:希爾排序就是為了加快速度簡單地改進了插入排序,交換不相鄰的元素以對陣列的區域性進行排序。

希爾排序的思想是採用插入排序的方法,先讓陣列中任意間隔為 h 的元素有序,剛開始 h 的大小可以是 h = n / 2,接著讓 h = n / 4,讓 h 一直縮小,當 h = 1 時,也就是此時陣列中任意間隔為1的元素有序,此時的陣列就是有序的了。

(5)歸併排序:將乙個大的無序陣列有序,我們可以把大的陣列分成兩個,然後對這兩個陣列分別進行排序,之後在把這兩個陣列合併成乙個有序的陣列。由於兩個小的陣列都是有序的,所以在合併的時候是很快的。

通過遞迴的方式將大的陣列一直分割,直到陣列的大小為 1,此時只有乙個元素,那麼該陣列就是有序的了,之後再把兩個陣列大小為1的合併成乙個大小為2的,再把兩個大小為2的合併成4的 ….. 直到全部小的陣列合併起來。

(6)快速排序:我們從陣列中選擇乙個元素,我們把這個元素稱之為中軸元素吧,然後把陣列中所有小於中軸元素的元素放在其左邊,所有大於或等於中軸元素的元素放在其右邊,顯然,此時中軸元素所處的位置的是有序的。也就是說,我們無需再移動中軸元素的位置。

從中軸元素那裡開始把大的陣列切割成兩個小的陣列(兩個陣列都不包含中軸元素),接著我們通過遞迴的方式,讓中軸元素左邊的陣列和右邊的陣列也重複同樣的操作,直到陣列的大小為1,此時每個元素都處於有序的位置。

(7)堆排序:堆的特點就是堆頂的元素是乙個最值,大頂堆的堆頂是最大值,小頂堆則是最小值。

堆排序就是把堆頂的元素與最後乙個元素交換,交換之後破壞了堆的特性,我們再把堆中剩餘的元素再次構成乙個大頂堆,然後再把堆頂元素與最後第二個元素交換….如此往復下去,等到剩餘的元素只有乙個的時候,此時的陣列就是有序的了。

(8)計數排序:計數排序是一種適合於最大值和最小值的差值不是不是很大的排序。

基本思想:就是把陣列元素作為陣列的下標,然後用乙個臨時陣列統計該元素出現的次數,例如 temp[i] = m, 表示元素 i 一共出現了 m 次。最後再把臨時陣列統計的資料從小到大彙總起來,此時彙總起來是資料是有序的。

(9)桶排序:桶排序就是把最大值和最小值之間的數進行瓜分,例如分成 10 個區間,10個區間對應10個桶,我們把各元素放到對應區間的桶中去,再對每個桶中的數進行排序,可以採用歸併排序,也可以採用快速排序之類的。

之後每個桶裡面的資料就是有序的了,我們在進行合併彙總。

(10)基數排序:基數排序的排序思路是這樣的:先以個位數的大小來對資料進行排序,接著以十位數的大小來多數進行排序,接著以百位數的大小……

排到最後,就是一組有序的元素了。不過,他在以某位數進行排序的時候,是用「桶」來排序的。

由於某位數(個位/十位….,不是一整個數)的大小範圍為0-9,所以我們需要10個桶,然後把具有相同數值的數放進同乙個桶裡,之後再把桶裡的數按照0號桶到9號桶的順序取出來,這樣一趟下來,按照某位數的排序就完成了

2.4 請給出本週學習總結

1 學習進度條

周/日期

這週所花的時間

學到的知識點簡介

目前比較迷惑的問題

1-3/1--1-3/5

2.5測試資料寫入檔案,使用測試程式檢驗**

對於檔案這部分知識還是很懵

3-6--3/20

13使用陣列解決問題

陣列的基礎及高階用法

2 累積**行和部落格字數

3 學習內容總結和感悟

(1):學習到這個部分的時候,發現有多種方式解決同乙個問題,並且能找到更好的方法優化原有的**。

(2):多思考,多實驗。

4 去了解氣泡排序,並用自己的話進行說明
氣泡排序:把第乙個元素與第二個元素比較,如果第乙個比第二個大,則交換他們的位置。接著繼續比較第二個與第三個元素,如果第二個比第三個大,則交換他們的位置….

我們對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣一趟比較交換下來之後,排在最右的元素就會是最大的數。

除去最右的元素,我們對剩餘的元素做同樣的工作,如此重複下去,直到排序完成。

C語言I部落格作業02

這個作業屬於那個課程 c語言程式設計i 這個作業要求在 c語言i部落格作業02 我在這個課程的目標是 掌握黑客的學習提問方法,提公升自己的學習能力,初步認識mingw w64 這個作業在那個具體方面幫助我實現目標 參考文獻 提問的智慧型 a.請仔細閱讀 提問的智慧型 用自己的話描述你的收穫,並舉例子...

C語言I部落格作業02

這個作業屬於那個課程 c語言程式設計i 這個作業要求在 班級作業要求 我在這個課程的目標是 希望通過這次作業熟練掌握溫度換算 與一些簡單的程式設計,累計更多知識點與操作時要注意的細節。這個作業在那個具體方面幫助我實現目標 學會了如何的高效提問和安裝編譯器,可以快速提示工作效率。參考文獻 c語言程式設...

C語言 I部落格作業02

這個作業屬於那個課程 c語言程式設計i 這個作業要求在 我在這個課程的目標是 學會程式語言和設計程式並能夠利用所學知識解決這方面的一些問題 這個作業在那個具體方面幫助我實現目標 學會使用c語言程式設計和解決問題 參考文獻 提問的智慧型 pta系統常見問題解答 答 在閱讀了這篇文章之後,我學到了以下幾...