C語言II 作業02

2022-07-05 17:12:11 字數 3097 閱讀 9492

這個作業屬於哪個課程

這個作業要求在**

homework/11810

這個作業的目標

《了解陣列,掌握用一維陣列進行程式設計,選擇排序法和二分查詢法》

學號<20208962>

7-1 年齡與疾病

7-2 選擇排序法

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

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

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

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

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

解法1:

輸入輸出

測試資料1:

123 9 ,4 8 ,5 7

測試資料2:

20 2

測試資料3:

50 5,1 4,2 3

解法2:

輸入輸出

----

----

-----

測試資料1:

18 9

測試資料2:

40 4,1 3

測試資料3:

60 6,1 5,2 4

解法3:

輸入輸出

----

----

-----

測試資料1:

178 ,9 8

測試資料2:

167 9,8 8,9 7

測試資料3:

156 9,7 8, 8 7,9 6

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

1.解法一雖然簡單易操作,但是效率並不高,解法二,三陣列應用複雜程度更高。

2.解法二和解法一的區別不是很大,解法二相比於解法一在時間上有所折扣,但是效率更高

3.解法三對陣列進行排序,然後使用二分查詢法,不需要多次遍歷陣列,時間複雜度低於前兩種演算法

由於所學知識有限,並沒有更好的演算法。

1、氣泡排序:氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;

2、選擇排序:一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

3、插入排序:插入排序(insertion-sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。一般來說,插入排序都採用in-place在陣列上實現。

4、希爾排序:2023年shell發明,第乙個突破o(n2)的排序演算法,是簡單插入排序的改進版。它與插入排序的不同之處在於,它會優先比較距離較遠的元素。希爾排序又叫縮小增量排序。先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序。

5、快速排序:快速排序的基本思想:通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

6、計數排序:計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。找出待排序的陣列中最大和最小的元素;統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項並對所有的計數累加。1.學習進度條

周/日期

所花時間

學到的知識

目前不懂的問題

第一周10h

檔案操作

**優化的時間

第二週12h

一維陣列,了解排序演算法

暫無2.累積**行和部落格字數

3.學習內容總結和感悟

1.通過這一周的學習,我們了解了陣列,選擇排序法和二分查詢法

2.知道了在哪種情況下可以使用構造資料型別—陣列進行資料的處理,可以使用一維陣列進行程式設計

3.掌握的東西越來越多,學習的東西越來越複雜,都暗示著我們要歸納總結繼續努力

4.孰能生巧,學到的知識要多去運用,多去學習別人的學習方法,取長補短

氣泡排序法:

1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

3.針對所有的元素重複以上的步驟,除了最後乙個。

4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

C語言II 作業02

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

C語言II 作業02

這個作業屬於哪個課程 這個作業要求在 homework 11822 這個作業的目標 使我們了解並掌握一維陣列,並且自行去了解排序演算法 學號 20209179 一 本週教學內容 目標 第七章 陣列 7.17.1 輸出所有大於平均值的數 1.學生知道在哪種情況下可以使用構造資料型別 陣列進行資料的處理...

C語言II 作業02

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