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