排序演算法 PTA習題為例

2021-10-03 20:25:10 字數 1794 閱讀 7576

pta上有一道題目是要求用「選擇法排序」的方法來排序。

我對排序還是不太了解,藉此用冒泡,選擇,插入法來解決這道題目,加深對排序的理解。

題目

本題要求將給定的n個整數從大到小排序後輸出。

輸入樣例:
4

5 1 7 6

輸出樣例:
7 6 5 1

從前向後(或從後向前)依次比較相鄰兩個元素的大小,如果逆序(與題意要求的順序相反)就進行交換,使最小(最大)的元素上浮(下沉)到本次排序的最前面(最後面),從而完成一趟(pass)排序。下一趟排序時,已經有序的元素不再參與。這樣的話,n個元素需要進行n-1趟排序

第一趟:參與數字序列:5 1 7 6

第二趟:參與數字序列:5 7 6

…類似經過n-1趟排序後:7 6 5 1

**:

#include

#define max 100

intmain()

for(i=

0;i}printf

("%d"

,s[0])

;for

(i=1

;i)printf

(" %d"

,s[i]);

}

找到當前數字序列中最大(最小)的數,記錄其所在位置,將其和最前面(最後面)的數進行交換,使最小(最大)的元素上浮(下沉)到本次排序的最前面(最後面),從而完成一趟(pass)排序。下一趟排序時,已經有序的元素不再參與。這樣的話,n個元素需要進行n-1趟排序

第一趟:參與數字序列:5 1 7 6

第二趟:參與數字序列:1 5 6

第三趟:參與數字序列:5 1

排序不變,最終得到最後序列 7 6 5 1.

**:

#include

#define max 100

intmain()

for(i=

0;i1;i++)if

(pos!=i)

}printf

("%d"

,s[0])

;for

(i=1

;i)printf

(" %d"

,s[i]);

}

將陣列的第乙個數認為是有序陣列,從後往前(從前往後)掃瞄該有序陣列,把陣列中其餘n-1個數,根據數值的大小,插入到有序陣列中,即通過比較和移動有序數列中的元素,將元素插入到合適的位置直至陣列中的所有數有序排列為止。這樣的話,n個元素需要進行n-1趟排序

第一趟:參與數字序列:5

第二趟:參與數字序列:5 1

第三趟:參與數字序列:7 5 1

類似地排序後,得到7 6 5 1

**:

#include

#define max 100

intmain()

for(i=

1;is[f]

=t;//安排此數t的位置 }}

printf

("%d"

,s[0])

;for

(i=1

;i)printf

(" %d"

,s[i]);

}

淺解,如有錯誤請指正

PTA 演算法練習題 回溯

1.最佳排程問題 假設有n n 20 個任務由k k 20 個可並行工作的機器完成。完成任務i需要的時間為ti。試設計乙個演算法,對任意給定的整數n和k,以及完成任務i 需要的時間為ti i 1 n。計算完成這n個任務的最佳排程,使得完成全部任務的時間最早。輸入格式 輸入資料的第一行有2 個正整數n...

演算法導論 堆排序習題

1.怎樣利用最大 小 堆構成的優先實現先進先出佇列或者棧 開始看這道題沒有弄清以什麼優先,原來是先進先出佇列只要保證先進來優先順序高,棧保證後進來優先順序高,然後每次彈出堆頂元素即可 2.如何在logn時間裡刪除乙個元素 思路和如何在堆中增加乙個元素是一樣的,因為堆要的形狀要保證是一顆完全二叉樹,決...

資料結構排序演算法習題

問題描述 演算法思路 快排演算法和三者取中演算法都運用了遞迴思想,將樞軸元素定好位置後分別對左邊和右邊繼續呼叫該函式,直到排到只剩乙個數為止。為了衡量不同演算法的效率,隨機生成資料並且存於檔案中,從檔案中取資料並利用不同演算法進行排序。演算法描述 1.void quick int data,int ...