本文目錄一覽:
- 1、python怎麼快速排序與查找
- 2、python 算法種類
- 3、求python中,自定義的複雜數據結構,快速排序的方法
- 4、幾種排序算法分析及python實現
- 5、python中如何按不同單位的質量排序
- 6、python算法有哪些
python怎麼快速排序與查找
算法體現的是一個思想,就像這裡體現的是一個”分而治之”的思想,只要思想不山寨,一些小細節其實不要太在意。學算法嘛,就學個處理問題的思想。不過真正的快排算法不是這樣的,真正最優的快排要求隨機選擇主元加原址排序。我這裡兩樣都沒做到。但是我還是認為他是個快排算法,因為他的思想就是快排的思想。
很多時候研究算法去爭論代碼量的多少真的沒有這個必要。
python 算法種類
1. 選擇排序算法:選擇排序是一種簡單直觀的排序算法。原理:首先在未排序序列中找到最小或最大元素,存放到排序序列的起始位置;然後,再從剩餘未排序元素中繼續尋找最大最小元素,然後放到已排序序列的後面,以此類推直到所有元素均排序完畢。
2. 快速排序算法:快速排序的運行速度快於選擇排序。原理:設要排序的數組為N,首先任意選取一個數據作為關鍵數據,然後將所有比它小的數放到它前面,所有比它大的數都放到它後面,這個過程稱之為快速排序。
3. 二分查找算法:二分查找的輸入是一個有序的列表,如果要查找的元素包含在一個有序列表中,二分查找可以返回其位置。
4. 廣度優先搜索算法:屬於一種圖算法,圖由節點和邊組成。一個節點可以與多個節點連接,這些節點稱為鄰居。它可以解決兩類問題:第一類是從節點A出發,在沒有前往節點B的路徑;第二類問題是從節點A出發,前往B節點的哪條路徑最短。使用廣度優先搜索算法的前提是圖的邊沒有權值,即該算法只用於非加權圖中,如果圖的邊有權值的話就應該使用狄克斯特拉算法來查找最短路徑。
5. 貪婪算法:又叫做貪心算法,對於沒有快速算法的問題,就只能選擇近似算法,貪婪算法尋找局部最優解,並企圖以這種方式獲得全局最優解,它易於實現、運行速度快,是一種不錯的近似算法。
求python中,自定義的複雜數據結構,快速排序的方法
應該是你sorted的使用方式不對吧,它可以對name.key這樣的形式進行排序的。
class m:
def __init__(self,name,id):
self.name=name
self.id=id
@property
def key(self):
return self.name
def len(self):
return len(self.name)
def __str__(self):
return ‘{{\’name\’:\'{0}\’,\’id\’:{1}}}’ \
.format(self.name,self.id)
__repr__ = __str__
s = [m(‘zzzz’,1),m(‘aaa’,4)]
l = [(‘source’, s),
]
# 直接屬性排序
l.append((‘by name’, sorted(s, key=lambda x: x.name)))
l.append((‘by id’, sorted(s, key=lambda x: x.id)))
# 屬性函數排序
l.append((‘by key’, sorted(s, key=lambda x: x.key)))
# 函數排序
l.append((‘by len()’, sorted(s, key=lambda x: x.len())))
for e in l:
print(e[0])
print(e[1])
這是輸出的結果:
source
[{‘name’:’zzzz’,’id’:1}, {‘name’:’aaa’,’id’:4}]
by name
[{‘name’:’aaa’,’id’:4}, {‘name’:’zzzz’,’id’:1}]
by id
[{‘name’:’zzzz’,’id’:1}, {‘name’:’aaa’,’id’:4}]
by key
[{‘name’:’aaa’,’id’:4}, {‘name’:’zzzz’,’id’:1}]
by len()
[{‘name’:’aaa’,’id’:4}, {‘name’:’zzzz’,’id’:1}]
上述四種用法都是沒問題的,至於name[key]的形式同樣是OK的。
sorted的參數key,它是一個函數,簡單的話可以直接用lambda,複雜點的可以定義成有一個參數的函數,比如:
def sorted_other(item):
if hasattr(item, ‘name’):
return item.name
else:
return None
l.append((‘by other func’, sorted(s, key=sorted_other)))
幾種排序算法分析及python實現
排序算法針對不同情況有所不同,不能一概而論。
計算機課程的數據結構有幾個章節在討論排序,這裡不能盡述,大致來說快速排序、希爾排序、堆排序、直接選擇排序不是穩定的排序算法,而基數排序、冒泡排序、直接插入排序、折半插入排序、歸併排序是穩定的排序算法。
直接百度“排序”,查看百度百科裡的解釋,裡面有常用算法和例子代碼,可以研究一下。
python中如何按不同單位的質量排序
1.冒泡排序,相鄰位置比較大小,將比較大的(或小的)交換位置;
2.選擇排序,遍歷選擇一個最小的數與當前循環的第一個數交換;
3.快速排序:將子段的第一個元素做為中值,先從右向左遍歷,如過比中值大high-1,如果比中值小,將這個值放到low那裡。
python算法有哪些
算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表着用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間複雜度與時間複雜度來衡量。
一個算法應該具有以下七個重要的特徵:
①有窮性(Finiteness):算法的有窮性是指算法必須能在執行有限個步驟之後終止;
②確切性(Definiteness):算法的每一步驟必須有確切的定義;
③輸入項(Input):一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸 入是指算法本身定出了初始條件;
④輸出項(Output):一個算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒 有輸出的算法是毫無意義的;
⑤可行性(Effectiveness):算法中執行的任何計算步驟都是可以被分解為基本的可執行 的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性);
⑥高效性(High efficiency):執行速度快,佔用資源少;
⑦健壯性(Robustness):對數據響應正確。
相關推薦:《Python基礎教程》
五種常見的Python算法:
1、選擇排序
2、快速排序
3、二分查找
4、廣度優先搜索
5、貪婪算法
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/188699.html