天天看點

python學生成績排序_學生成績排序基礎算法筆記

剛接觸程式語言的時候,經常會用到一些排序的問題,按照算法運作效率和了解上面來看的話,有的時候我們可以記錄一些比較便于了解的;

1:如果一個班有5個同學考試成績如下,需要我們通過程式的方式來對成績從高到低來排序,學生成績如下:

88,52,67,93,87(各個同學的成績不相等)

方法一:

list = [88,52,67,93,87] #将這5個學生的成績存入清單或者數組

rank = [1,1,1,1,1] #新設定一個清單(數組)用于存放list清單中各個元素的排位情況(長度需要跟list一緻),這個地方之是以把每個元素設定為1,程式中可以了解

new=[0,0,0,0,0] #定義一個新的清單(數組),用于存放排序後的成績

for j in range(0,5): #此處用python的文法,用C語言可以是 for(j=0,j<5,j++),此循環設定的目的是用于周遊list清單(數組)

sm = list[j] #将清單(數組)中第一個值指派給 sm,暫存list元素的值,用于設定後面的值來跟本值的比較,從list第一個元素(88)開始---87結束

for m in list: #再設定一個循環來提取list的每個元素與剛才暫存的sm來比較

if m > sm:

rank[j]=rank[j]+1 #此處是比較關鍵的,當後面提取出來list元素的值比暫存的sm的值大的時候,rank[j]對應的值就加1;這裡要說明一下,比如提取的是“93”,因為93比

#88的值要大,是以按照排序的位置,93就要排到88的前面,如果93排的是“1”号位置,那麼88通過本次比較就往後移動1位;因本來我們設定的rank裡  #面各元素的值都是1,于是當我們把裡面的值“+1”的次數統計出來後,自然就記錄好了這個數在整個數列中應該排的位置。

print(rank) #于是得出的rank的結果是:[2,5,4,1,3] ,證明,list中的各個資料對應的排序位置應該是2,5,4,1,3

for n in range(0,5): #再次設定一個5次循環,用于周遊list

new[rank[n]-1]=list[n] #分别把list目前的值替換新清單中排位中的資料,比如88應該排第二位,那就替換新清單中2号位置的資料,new[1](rank[n]-1 清單和數組位置從0開始 #的,是以此處記得“-1”)

print(new) #執行後結果:[93, 88, 87, 67, 52]

分析:如果按照冒泡排序的方式,就是每次比較2個數字,譬如A,B,C,D,E,步驟:1,A與B比較,如果A大 2,拿A去跟C比較,如果A比C大 3,A跟D比較,如果A比D大。4,A與E比較。那麼問題來了,A是比較出來了,是最大的,關鍵是B,C,D,E之間還得重新比較一下又要重新交換位置,尤其是資料多了以後,程式就不太便于了解;而設定一個跟原數組同長度的數組後,就便于了解和記錄每個元素應該排放的位置了;當然這是個例子,本題資料是不相同的,那麼資料相同了的話,要做多兩層判斷了,留下供思考;

方法二:因python中有自帶的一些實用的函數,處理起來就非常的簡便了

list2=[93, 88, 87, 67, 52]

list2.sort(reverse=True)

print(list2) #此時不管裡面是否有相同分數的,都可以正常排序出來(隻是我們沒有研究sort内部的算法)