C語言II部落格作業02

2022-07-02 08:27:09 字數 3319 閱讀 3968

這個作業屬於哪個課程

2020級計科三班

這個作業要求在**

作業要求

這個作業的目標

使用構造資料型別—陣列進行資料的處理

學號<20209013>

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

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

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

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

區別:

解法一求兩者之和是否為給定的數字,解法二和解法三是用給定的數字求滿足的陣列中的數,最後都是求兩個在陣列中的數。

解法一:用窮舉法把陣列中的數乙個乙個代入if語句中乙個乙個判斷二個陣列中的數之和是否為給定的數字,其時間複雜度為n(n-1)/2即o(n^2)。

解法二:用乙個在陣列中的數去求乙個陣列中的另乙個數,代入if語句中去判斷陣列中的另乙個數是否為給定的數字減去這個在陣列中的數,其時間複雜度是o(nlog2n)。

解法三:用二分查詢法陣列中的二個數兩者之和是否為給定的數字,二分查詢法是一種效率較高的查詢方法,把要找的數通過二分查詢法慢慢縮短範圍最後找出來,但一定要按大小排序,其時間複雜度

是o(2log2n)。

氣泡排序:比較相鄰的元素,大的數向後排,最大的數排在最後之後,針對所有的元素重複大的向後排,除了最後乙個,直到沒有任何一對數字需要比較,其時間複雜度:o(n²)。

插入排序:從陣列第2個元素開始抽取元素,把它與左邊第乙個元素比較,如果左邊第乙個元素比它大,則繼續與左邊第二個元素比較下去,直到遇到不比它大的元素,然後插到這個元素的右邊,重複上述的迴圈

直到排序結束,時間複雜度:o(n2)。

選擇排序:特點就是簡單直觀,把排序的序列裡找到最小元素放到序列的首端,在剩下的元素中的最小元素放到待序列的首端,重複進行直到排序結束,其時間複雜度:o(n²)。

快速排序:選擇乙個關鍵值作為基準值,比基準值小的都在左邊序列,比基準值大的都在右邊序列,用基準值和最後乙個值比較比基準值小的交換位置,比基準值大的位置不變,找到後又從前往後開始比較,

如果有比基準值大的交換位置,重複上述的迴圈直到排序結束,其時間複雜度為:nlog(n)。

希爾排序:了加快速度簡單地改進了插入排序,交換不相鄰的元素以對陣列的區域性進行排序,讓陣列中任意間隔為 h 的元素有序,剛開始 h 的大小可以是 h = n / 2,接著讓 h = n / 4,讓 h 一直縮小,

當 h = 1 時,也就是此時陣列中任意間隔為1的元素有序,此時的陣列就是有序的了,對各個分組進行插入的時候並不是先對乙個組排序完了再來對另乙個組排序,而是輪流對每個組進行排序,時

間複雜度:o(nlogn)。

歸併排序:(1)申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列。

(2)設定兩個指標,最初位置分別為兩個已經排序序列的起始位置。

(3)比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置。

(4)重複步驟3直到某一指標達到序列尾。

(5)將另一串行剩下的所有元素直接複製到合併序列尾。

其時間複雜度為:nlog(n)。

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

有序的,時間複雜度:o(nlogn) 。

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

素只有乙個的時候,此時的陣列就是有序的了,時間複雜度:o(nlogn) 。

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

資料是有序的,時間複雜度:o(n+k) k表示臨時陣列的大小。

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

之類的,時間複雜度:o(n+k)。

基數排序:先以個位數的大小來對資料進行排序,接著以十位數的大小來多數進行排序,接著以百位數的大小……排到最後,就是一組有序的元素了,時間複雜度:o(kn)。

1 學習進度條周這周所花的時間

**行學到的知識點簡介

目前比較迷惑的問題

第一周3.3-3.8

15小時

120行

檔案儲存

對於檔案還是看的不懂

第二週3.10-3.15

18小時

140行

一維陣列和排序演算法

排序演算法不熟

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

3 學習內容

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