C語言I部落格園作業02

2022-07-01 04:27:11 字數 4139 閱讀 1890

1.作業頭

這個作業屬於哪個課程

這個作業要求在**

homework/11825

這個作業的目標

<練習使用陣列,鞏固所學知識點>

學號<20209249>

一、本週教學內容&目標

第七章 陣列 7.17.1 輸出所有大於平均值的數

1.學生知道在哪種情況下可以使用構造資料型別—陣列進行資料的處理

2.掌握用一維陣列進行程式設計

3.掌握選擇排序法和二分查詢法

二、本週作業(總分:50分)

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

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

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

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

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

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

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

解法一

解法二

解法三

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

解法一採用窮舉法,所謂窮舉,顧名思義是將陣列中每兩兩元素進行相加再與定值比較。

解法二與解法二相似,只是將運算加改成減。

解法三相對前兩種解法有所不同,先排序,再採用二分法不斷縮小目標所在範圍,從而提公升了演算法的效率。

以目前所掌握的知識無法出除更好的演算法。

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

直接插入排序(insertion sort)

基本思想

01.將待排序的無序數列看成是乙個僅含有乙個元素的有序數列和乙個無序數列,將無序數列中的元素逐次插入到有序數列中,從而獲得最終的有序數列。

希爾排序(shell sort)

基本思想

氣泡排序(bubble sort)

基本思想

01.在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。每一趟排序後的效果都是講沒有沉下去的元素給沉下去。

拓展 (氣泡排序的改進 ---- 雞尾酒排序)

雞尾酒排序與氣泡排序的不同處在於排序時是以首尾雙向在序列中進行排序。

01.先對陣列從左到右進行公升序的氣泡排序;

02.再對陣列進行從右到左的降序的氣泡排序;

03.以此類推,持續的、依次的改變冒泡的方向,並不斷縮小沒有排序的陣列範圍;

雞尾酒排序的優點是能夠在特定條件下(如集合中大部分元素有序),減少排序的回合數。

快速排序(quick sort)

基本思想

01.快速排序演算法的基本思想為分治思想。

02.從數列中取出乙個數作軸值(基準數)pivot;

03.根據基準數將數列進行分割槽,小於基準數的放左邊,大於基準數的放右邊;

重複分割槽操作,知道各區間只有乙個數為止。

選擇排序(selection sort)

基本思想

01.在要排序的一組數中,選出最小(或者最大)的乙個數與第1個位置的數交換;

02.在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n−1個元素(倒數第二個數)和第n個元素(最後乙個數)比較為止。

&emsp;

堆排序(heap sort)

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

基本思想(以大根堆為例)

01.初始化堆: 將數列a[1,...,n]a[1,...,n]a[1,...,n]構造成大頂堆(即根結點最大,左右結點均小於根結點);

02.交換資料: 將a[1]a[1]a1和a[n]a[n]an互換,使得a[n]a[n]a[n]是數列中的最大值;再將a[1,...,n−1]a[1,...,n-1]a[1,...,n−1]構造大頂堆,交換a[1]和a[n−1]a[1]和a[n-1]a[1]和a[n−1]; 再將a[1,...,n−2]​a[1,...,n-2]​a[1,...,n−2]​構造成大頂堆,…,直到剩下乙個元素,就是序列的最小值; 此時整個序列就按從小到大排列好了。

歸併排序(merge sort)

基本思想

01.歸併(merge)排序演算法採用分治策略,將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。

02.然後再把有序子串行合併為整體有序序列。

基數排序(radix sort)

基數排序過程無須比較關鍵字,而是通過「分配」和「收集」過程來實現排序.

基本思想

01.將所有待比較數值(正整數)統一為同樣的數字長度,數字較短的數前面補零。

02.從最低位開始,依次進行一次排序。

03.這樣從最低位排序一直到最高位排序完成以後,數列就變成乙個有序序列。

2.4 請給出本週學習總結(15分)

1 學習進度條(5分)

日期學習所用時間(h)

**行數

本週所學知識點

存在問題

3.1~3.7

24167

回顧所學知識及初步了解檔案

**執行的時間測試,獲取檔案中資料

3.8~3.14

38260

陣列、排序演算法

已用排序演算法使用不熟練

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

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

已經是開學第二週了,漸漸開始進入狀態。不過老師上課時間減少,感覺有些不習慣,其中主要對自主學習有了更高的要求,比如這次的作業就需自己去查詢各種資料。不過通過此次作業讓我有了新收穫,拓寬了知識點。

拓展:

選擇排序**:

氣泡排序**:

兩者排序差異在基本思想.

C語言I 部落格園作業04

這個作業屬於那個課程 c語言程式設計 這個作業要求在 我在這個課程的目標是 熟練c語言的操作,增強專業能力 這個作業在那個具體方面幫助我實現目標 學會使用for迴圈語句 參考文獻 c語言程式設計 本題要求編寫程式,計算序列 1 1 2 1 3 的前n項之和。1.1.1資料處理 資料表達 使用n,i ...

C語言I部落格園作業08

這個作業屬於那個課程 這個作業要求在 這個作業的目的 通過總結自己在pta作業中的錯誤 提公升自身對continue,break,巢狀結構使用的熟悉程度 學號 20209149 第4章 迴圈結構 4.3 熟悉break,continue的使用4.4熟悉使用迴圈的巢狀解決問題。這個作業屬於哪個課程 c...

C語言部落格園作業05

作業05 這個作業屬於那個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 學習函式的定義 這個作業在那個具體方面幫助我實現目標 參考文獻 c語言程式設計1 三 本週作業 pta實驗作業 互評 學習總結 四 作業格式 1.pta實驗作業 20分 題 從pta題目集中選出2個你最滿意的題...