《演算法筆記》4 1 總結

2021-08-22 06:03:38 字數 960 閱讀 5008

本節內容為排序

題目列表

b1015/a1062

a1012

a1016

a1028

a1055

a1075

a1083

a1080

a1095

本節首先介紹了標頭檔案下的排序函式sort();,sort()函式採用快排實現,並且進行了特殊處理保證能夠規避掉經典快排中可能會實際上退化到o(n2)的情況,sort()函式的結構如下

我們可以通過對比較函式cmp的改寫,來制定不同的排序規則,適應不同情況下的排序要求。比如對乙個複雜的結構體進行排序,我們可以指定這個結構體中不同元素在排序中的優先順序,對整個結構體進行不同條件下的排序,cmp函式的格式如下

bool cmp(elemtype a,elmetype)
如果不寫cmp函式,sort()將進行公升序排列

當某些題目需要對資料物件進行排名時,例如按照成績對學生進行排名,通常會要求成績相同的排名相同,我們通常用以下這種方式來賦予排名(前提是所以物件已經按照排序規則嚴格就序)

stu[0].rank=1;

for(int i=1;i將全體資料中的第乙個置為第一名,此後迴圈從第二個物件開始,依次賦予排名,如果這個學生成績和上乙個相同,那麼他的排名也要和上乙個相同。

這類題目最重要的是設定合理的結構體,高效的儲存資訊並且能夠對題目發揮良好的作用,然後對資料物件按照給定規則進行排序,之後進行資料的處理,同時我們要注意對於資料有一些預處理的方法,比如a1055中的預處理可以極大的減少正式處理的資料規模,提高演算法的效率,避免超時。

結構體物件的初始化也是乙個值得思考的點,如果你對結構體中某些元素初始化的時候賦予合適的值,會很好的在後面的演算法中幫助到你,比如a1075中我們把stu中的grade全部初始化為-1,和0區別開來,對比編譯通過得0分和未編譯通過的情況

本章的演算法難在怎麼合理的處理資料,尋找解題要求的點,如何輸出題目所要求的結果

演算法筆記4 1 問題 I 排名

今天的上機考試雖然有實時的ranklist,但上面的排名只是根據完成的題數排序,沒有考慮每題的分值,所以並不是最後的排名。給定錄取分數線,請你寫程式找出最後通過分數線的考生,並將他們的成績按降序列印。測試輸入包含若干場考試的資訊。每場考試資訊的第1行給出考生人數n 0 n 1000 考題數m 0 m...

演算法筆記演算法初步(4 1排序)

1.選擇排序 每次在待排序區間中選擇最小的往前排,隨著排序已排序區間不斷後移 include 選擇排序 int a 6 int n 5 int main int n 5 int main int n 5 int main printf n sort a,a 5 a 0 a 4 五個數 for int...

演算法導論4 1

返回由最大負數組成的單元素子陣列 如下 includeusing namespace std int main int n 16 int max sum 0,max left 0,max right 0 for int i 0 i n i printf sum d d,d max sum,max l...