C語言II部落格作業02

2022-06-29 14:09:09 字數 2236 閱讀 6498

這個作業屬於哪個課程

這個作業要求在**

/homework/11822

這個作業的目標

了解並學習多種排序演算法

學號20209186

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

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

**截圖:

測試資料:

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

**截圖:

測試資料:

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

**截圖:

測試資料:

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

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

列舉法時間複雜度較大(遍歷所有資料),相比而言,二分法可以節省時間

更好的演算法? 代替陣列用容器,容器中有許多方便的演算法可以直接使用,更加方便的說(佑佑都還不太會=͟͟͞͞ʕ•̫͡•ʔ)

1.選擇排序:平均時間複雜度為o(n^2),工作原理是每次找出第 i 小的元素,然後將這個元素與陣列第 i 個位置上的元素交換。

2.氣泡排序:工作原理是每次檢查相鄰兩個元素,如果前面的元素與後面的元素滿足給定的排序條件,就將相鄰兩個元素交換。

3.插入排序:工作原理為將待排列元素劃分為「已排序」和「未排序」兩部分,每次從「未排序的」元素中選擇乙個插入到「已排序的」元素中的正確位置。

4.快速排序:較於前幾著更為複雜,通過分治(遞迴)原理來對陣列進行排序。

5.桶排序:較為簡單的一種排序演算法,通過將輸入的資料放入空的桶中,再從不是空的桶裡把元素再放回原來的序列中。

6.希爾排序:將待排序序列分為若干子串行,再對這些子串行進行插入排序;減小每個子串行中元素之間的間距,重複上述過程直至間距減少為 1。

7.計數排序:工作原理是使用乙個額外的陣列c ,其中第 i 個元素是待排序陣列 a 中值等於 i 的元素的個數,然後根據陣列 c 來將 a 中的元素排到正確的位置。

1 學習進度條(5分)

周/日期

這週所花時間

**行學到的知識點簡介

目前比較迷惑的地方

1/3.1

3150

檔案檔案操作中許多函式還不太熟

2/3.13

27690

stl中部分容器與迭代器,排序

對各個容器的區分與使用,計數排序

2 累積**行和部落格字數(5分)

3 學習內容總結和感悟(5分)

哎~~ 哎~~ 排序演算法可提供許多遍歷,學習中提高思考能力,嗯,好東西
4 去了解氣泡排序,並用自己的話進行說明 (5分)

氣泡排序:工作原理是每次檢查相鄰兩個元素,如果前面的元素與後面的元素滿足給定的排序條件,就將相鄰兩個元素交換。

for (int i = 0; i < length; i++) }}

C語言II部落格作業02

作業屬於哪個課程 班級的鏈結 這個作業要求在 作業要求的鏈結 這個作業的目標 熟練運用陣列進行程式設計,學會使用一維陣列進行程式設計,掌握選擇排序法和二分查詢法 學號20208927 2.1 完成pta作業,並給出程式設計題完成截圖 2.2 題目 快速尋找滿足條件的兩個數 能否快速找出乙個陣列中的兩...

C語言II部落格作業02

這個作業屬於哪個課程 這個作業要求在 homework 11423 這個作業的目標 學習檔案的使用與知識 學號 20209165 1.學生知道在哪種情況下可以使用構造資料型別 陣列進行資料的處理 2.掌握用一維陣列進行程式設計 3.掌握選擇排序法和二分查詢法 能否快速找出乙個陣列中的兩個數字,讓這兩...

C語言II部落格作業02

這個作業屬於哪個課程 這個作業要求在 homework 11808 這個作業的目標 熟練的掌握陣列的編譯概念還有排序法 學號 20209222 第七章 陣列 7.17.1 輸出所有大於平均值的數 1.學生知道在哪種情況下可以使用構造資料型別 陣列進行資料的處理 2.掌握用一維陣列進行程式設計 3.掌...