C語言II部落格作業02

2022-06-27 17:15:11 字數 3516 閱讀 5885

這個作業屬於哪個課程

班級鏈結

這個作業要求在**

作業要求的鏈結

這個作業的目標

掌握如何使用陣列並且正確解決問題

學號20208945

二、本週作業

2.1 完成pta作業,並給出程式設計題完成截圖

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

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

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

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

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

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

解法一:

測試資料

5 6 1 2 3 4 8

16 8 2 5 7 9 8 10

17 9 5 4 8 9 7 6 4

2解法二:

測試資料

5 6 8 99 5 4 2

16 7 3 5 4 6 2 8

27 8 5 3 2 4 1 6 99

2解法三:

測試資料

5 6 9 8 4 2 1

1 2 4 8 99 1

8 9 6 8 2 6 5 4 7 99

2 4 5 6 6 7 8 99 2

7 10 5 999 6 57 3 7 8

3 5 6 7 8 57 999 1

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

解法一:這個演算法很簡單,寫起來也很容易,但是效率不高。

解法二:在乙個無序陣列中查詢乙個數的複雜度是o(n),對於每個數字arr[i],都需要查詢對應的sum-arr[i]在不在陣列中,很容易得到時間複雜度還是和解法一樣。

解法三:先將陣列排序,排序後可以按照順序進行判斷,找中間值判斷中間值的大小,若中間值大於所尋值,則再從陣列前半部分的中間值進行判斷,反之從後半部分判斷,縮小範圍節約時間。

其他的方法我覺得可以在建立陣列過程中在將資料儲存進陣列過程中判斷儲存資料元素,大於要求的元素可以直接排除,將陣列減小利用剩下的資料計算,可以簡化過程,減少時間。

2.3 請搜尋有哪些排序演算法,並用自己的理解對集中排序演算法分別進行描述

1.氣泡排序

比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;對每一對相鄰元素作同樣的工作,從

開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;針對所有的元素重複以上的步驟,除了最後乙個;重複步驟1~3,直到排序完成。

2.選擇排序

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,

然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

3.插入排序

通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

4.希爾排序

將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,具體演算法描述:

5.歸併排序

把長度為n的輸入序列分成兩個長度為n/2的子串行;對這兩個子串行分別採用歸併排序

;將兩個排序好的子串行合併成乙個最終的排序序列。

6.快速排序

快速排序使用分治法來把乙個串(list)分為兩個子串(sub-lists)。具體演算法描述如下:

從數列中挑出乙個元素,稱為 「基準」(pivot);

重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(

相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。

這個稱為分割槽(partition)操作;遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

7.堆排序

堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。

8.計數排序

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。

作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。找出待排序的陣列中最大和最小的元素;統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項;對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加);反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1。

9.桶排序

桶排序是計數排序的公升級版。它利用了函式的對映關係,高效與否的關鍵就在於這個對映函式的確定。桶排序 (bucket sort)的工作的原理:假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排)。

10.基數排序

基數排序是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優先順序排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。

氣泡排序法:

2.4 請給出本週學習總結

1 學習進度條

周/日期

這週所花的時間

**行數

學到的知識點簡介

目前比較迷惑的問題

第一周4小時

150如何在程式中呼叫檔案資料

怎麼能讀懂題怎樣解題

第二週6小時

300如何正確的使用陣列解決問題

怎麼能快速找到方法解題

第三週4小時

200氣泡排序法

怎麼能找到最簡單的解決問題的方法

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

累計**行數

部落格字數

1501880

3002604

2002405

3 學習內容總結和感悟

c語言學習有點難,有些問題連題目都看不懂,更不用說解決問題的思路了,我覺得c語言學習要靠練習和多看,才能熟能生巧,初期靠模仿,中期要思考,後期要自己不斷去改進創新。

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.掌...