C語言II 作業02

2022-07-02 11:00:18 字數 3225 閱讀 5177

這個作業屬於哪個課程

這個作業要求在**

/homework/11822

這個作業的目標

《使我們了解並掌握一維陣列,並且自行去了解排序演算法》

學號<20209179>

一、本週教學內容&目標

第七章 陣列 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,第二種跟第一種差別不是很大,只是判斷的條件不同。

3,第三種採用了二分查詢法,這種方法的原理是用那個數和中間的乙個數進行比較,然後縮小範圍查詢,這樣和前兩種方法的區別是能大大減少計算機計算的時間,提高效率

答:排序演算法一共有10種,分別是選擇排序,氣泡排序,插入排序,希爾排序,快速排序,歸併排序,基數排序,計數排序,堆排序和桶排序。

1,選擇排序:用第1個數跟第2個第3個數一次比較,使最小的數排到第1個位置,然後再用第二個數跟第三個數第四個數比較,使第2小的數排到第2個位置,以此類推。

2,氣泡排序:用第乙個數跟第二個數比較,再用第二個數跟第三個數比較,依次比較下去,最後就會排好序。

3,插入排序:從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

5,快速排序:在區間中隨機挑選乙個元素作基準,將小於基準的元素放在基準之前,大於基準的元素放在基準之後,再分別對小數區與大數區進行排序。

6,歸併排序:把資料分為兩段,從兩段中逐個選最小的元素移入新資料段的末尾。可從上到下或從下到上進行。

7,基數排序:將椅子陣列的個位數看作標誌,在遍歷陣列時,將對應的標誌放入到0~9編號的桶中,這個桶我們用二維陣列來表示。

比如35,它的個位數是5,那麼就放入bucket[5]的桶中,以此類推。

8,計數排序:將陣列最大值和最小值作差,將這個差值大小+1作為乙個新陣列的大小,比如說乙個序列7,5,7,8,4。最大和最小差為4,那麼建立乙個大小為5的陣列b,那麼b[0]對應的就是序列中最小值的個數,b[1]對應的就是序列中最小值+1的個數,b[2]對應的就是序列中最小值+2的個數··· ··· 最後根據b陣列重新對原序列賦值。

9,堆排序:利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。

10,桶排序:將陣列分到有限數量的桶子裡。每個桶子再個別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序)。

1 學習進度條

周/日期

這週所花時間

**行學到的知識點簡介

目前比較迷惑的地方

1/2021.3.1 -3.5

7h94

檔案以及計算時間差的方法

對於計算時間差的**,有些地方還不理解

2/2021.3.9 -3.19

48h398

學到了一維陣列以及一些簡單的排序演算法

對一些排序演算法的原理不太理解

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

3 學習內容總結和感悟

總結:對於二分查詢法有三個情況,當查詢的數小於中間值時,當查詢的數大於中間值時,當查詢的數等於中間值時,這些是二分查詢法的核心部分。在了解排序演算法後,發現有幾種基礎的排序演算法,其他的排序演算法都是基於基礎的演算法衍生的,所以只要把基礎的演算法了解透了就解決了大部分問題。

感受:這次的部落格作業的解法三有點難,二分查詢法雖然能快速地查詢,但思路比較難,**實現也比較難,經過多次修改後終於達成了理想的效果。

C語言II 作業02

這個作業屬於哪個課程 這個作業要求在 homework 11810 這個作業的目標 學習了解陣列,掌握用一維陣列進行程式設計,選擇排序法和二分查詢法 學號 20208991 解法一 比較簡單,需要將陣列中每個數兩兩與給定值去比較,判斷兩個值之和是否為給定值。解法二 較複雜,需要用給定值減去陣列中的其...

C語言II 作業02

這個作業屬於哪個課程 計科三班 這個作業要求在 這個作業的目標 學習和理解陣列,排序演算法 學號20209015 解法1 解法2 解法3 窮舉法 將陣列中的數乙個乙個去嘗試,直到找到結果。二分法 將陣列分為兩組,從中間開始嘗試,直到找到結果。二分法的速度比窮舉法快 1.氣泡排序 比較相鄰的兩個數,如...

C語言II 作業02

這個作業屬於哪個課程 這個作業要求在 homework 11810 這個作業的目標 了解陣列,掌握用一維陣列進行程式設計,選擇排序法和二分查詢法 學號 20208962 7 1 年齡與疾病 7 2 選擇排序法 能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值,為了簡化起見,我們假設...