Python超有趣實例通過冒泡排序來實現(xiàn)LOL厄斐琉斯控槍
今天來給大家講解一下"冒泡排序"
1、冒泡排序
當給定一個數(shù)組arr,使用冒泡排序?qū)⑵浒磸男〉酱蟮捻樞蚺帕小?/p>
具體原理網(wǎng)上已經(jīng)爛大街了,這里我就不去copy了,不懂的小伙伴可以借鑒Python 冒泡排序
定義:冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢"浮"到數(shù)列的頂端。
有人會說這不是很簡單的事情嗎,只需要
def bubble(arr): for i in range(len(arr)): for j in range(0,len(arr)-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] arr = [2,5,3,4,1] bubble(arr) for i in range(len(arr)): print("%d" % arr[i])
這樣做輸出的結(jié)果就是
12345
2、需求更改和算法介紹
那么,假設(shè)有一個數(shù)組,數(shù)組內(nèi)有若干位整數(shù),需要以這種過程去排序:使用冒泡排序的方法,當前者比后者小那么就將前者放到序列的末尾,如果后者小于前者,那么需要將后者與前者調(diào)換位置,又由于前者小于后者,那么前者會被放到序列末尾,依次類推,當數(shù)組內(nèi)的最大數(shù)與最小數(shù)進行比較時,默認將大的放到序列末尾
下面舉個例子:
假設(shè) arr=[2,5,3,4,1]
,按照上述方法進行排序arr第一次判斷2和5,發(fā)現(xiàn)2比5小,將2放到序列的末尾使數(shù)組變?yōu)閇5,3,4,1,2] ,依次類推數(shù)組發(fā)生變化[5,4,1,2,3]-> [5,1,2,3,4]由于1和5的特殊性,將最大的數(shù)放到序列末尾變?yōu)閇1,2,3,4,5],這樣排序就排好了
3、實際應(yīng)用
本算法專厄斐琉斯控槍而生,厄斐琉斯為英雄聯(lián)盟的一個特殊ADC,相信玩過英雄聯(lián)盟這款游戲的大家都很熟悉,更何況2021年EDG奪冠,冠軍皮膚為EDG厄斐琉斯。
1、厄斐琉斯簡介
厄斐琉斯有五把槍,分別為綠紅紫藍白,其每個槍的功能都不一樣,但玩家一直能保持著使用兩把槍的狀態(tài),且兩把槍之間可以隨意切換使用,每把槍擁有50發(fā)子彈,用完50發(fā)后,就可以切換到下一把槍,
最優(yōu)的順序,也是大眾的順序為:白綠紫藍紅,因為白和綠契合度很高,紅和白契合度很高,藍和紫契合度很高,藍和紅契合度很高,其他的兼容性比上述組合都要差些(大眾認為)。使契合度高的槍械相鄰,就會有著很強的戰(zhàn)斗力。所以此算法的需求就是將契合度高的槍械排序到相鄰位置
注意:5和1其實也是相鄰位置
2、代碼實現(xiàn)及說明
假設(shè)1代表白色,2代表綠色,3代表紫色,4代表藍色,5代表紅色
#定義"冒泡排序”函數(shù) def bubble(arr): for i in range(len(arr)): for j in range(0,len(arr)-i-1): #判斷手中槍械權(quán)重是否小于第二把武器,如果小就將其使用掉,如果大就使用另外一把武器 if arr[0] > arr[1]: print("將",arr[0],arr[1],"調(diào)換位置,并使用",arr[1]) #5和1的邏輯判斷 if arr[0] ==5 and arr[1] == 1: temp = arr[0] arr.append(temp) arr.remove(arr[0]) break arr[0],arr[1] = arr[1],arr[0] #使用掉手中武器,并將其堆到末尾 temp=arr[0] arr.append(temp) arr.remove(arr[0]) print(arr) if arr[0] < arr[1]and arr[0]!=1: print(arr[0],"使用完成,排到最后") temp = arr[0] arr.append(temp) arr.remove(arr[0]) print(arr) #定義arr數(shù)組為最初efls默認槍械(每局初始都為此順序) arr = [2,5,3,4,1] bubble(arr) for i in range(len(arr)): print("%d" % arr[i]) gun = {1:"白",2:"綠",3:"紫",4:"藍",5:"紅"} print("此中每個數(shù)字代表武器的顏色為",gun) cur_gun={2:"綠",5:"紅",3:"紫",4:"藍",1:"白"} # 小的先使用,用掉后掉到排序的最末端,默認5小于1 # [5,3,4,1,2] [5,4,1,2,3] [5,1,2,3,4] [1,2,3,4,5]
運行結(jié)果如下:
2 使用完成,排到最后
[5, 3, 4, 1, 2]
將 5 3 調(diào)換位置,并使用 3
[5, 4, 1, 2, 3]
將 5 4 調(diào)換位置,并使用 4
[5, 1, 2, 3, 4]
將 5 1 調(diào)換位置,并使用 1
1
2
3
4
5
此中每個數(shù)字代表武器的顏色為 {1: '白', 2: '綠', 3: '紫', 4: '藍', 5: '紅'}
以上就為默認順序變?yōu)樽罴秧樞虻目貥屗悸?/p>
4、總結(jié)
以上就為控槍的主要內(nèi)容,若需更改初始數(shù)組,只需更改arr中的槍械順序即可。
目前不足就是槍械是由數(shù)字來代替的,大家如果能記住每個數(shù)字對應(yīng)的顏色那么就可以。
記住初始順序的運行結(jié)果就可以了哈哈~
本文純屬娛樂并鞏固算法知識,切記游戲中不要退出來使用此程序!!
到此這篇關(guān)于Python超有趣實例通過冒泡排序來實現(xiàn)LOL厄斐琉斯控槍的文章就介紹到這了,更多相關(guān)Python冒泡排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談python函數(shù)調(diào)用返回兩個或多個變量的方法
今天小編就為大家分享一篇淺談python函數(shù)調(diào)用返回兩個或多個變量的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python sorted函數(shù)原理解析及練習(xí)
這篇文章主要介紹了python sorted函數(shù)原理解析及練習(xí),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02python中np.multiply()、np.dot()和星號(*)三種乘法運算的區(qū)別詳解
這篇文章主要介紹了python中np.multiply()、np.dot()和星號(*)三種乘法運算的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python使用wget實現(xiàn)下載網(wǎng)絡(luò)文件功能示例
這篇文章主要介紹了Python使用wget實現(xiàn)下載網(wǎng)絡(luò)文件功能,簡單介紹了wget安裝以及Python使用wget下載tar格式網(wǎng)絡(luò)文件并進行解壓處理相關(guān)操作技巧,需要的朋友可以參考下2018-05-05