最近在學習python, 想隨便 寫一下,python 寫一些 排序, 排序 演算法 那麼多,我也不一一介紹,寫幾個比較簡單的,冒泡,選擇,快排,插入排序
用 python 實現一下,當然 也有參考 網上的寫法, 相互學習吧,直接進入正題
氣泡排序 思想 我想大家 都應該理解就是 相鄰 兩個key 進行比較, 一趟排完後,肯定有乙個最值 排到第乙個或最後乙個位置, 之後 繼續這樣排,最終排完。
# coding=utf-8
#氣泡排序的實現
'''''交換排序—氣泡排序(bubble sort)'''
def bubble_sort(array):
length=len(array)
for i in range(length-1):
for j in range(length-1):
if array[j]>array[j+1]:
array[j],array[j+1]=array[j+1],array[j]
return array
if __name__ == '__main__':
mylist=[1,34,6,21,98,31,7,4,36,16,47,67,37,25,2]
print(bubble_sort(mylist))
最基本 的思想,每次 從 待排序列 選擇乙個最值 ,放在 第乙個位置, 之後 在從剩下的 待排序列中選擇 乙個最大值 放在 第二個位置, 依次類推
# coding=utf-8
'''選擇排序 實現python
'''def select_sort(array):
length=len(array)
for i in range(0,length):
k = i # 尋找最小元素的下標
for j in range(i+1, length):
if array[j] < array[k]:
k = j
# 找到最小的乙個下標,並且和 array[i],交換值,這樣array[i],就是最小值
array[i], array[k] = array[k], array[i]
return array
if __name__ == '__main__':
mylist=[1,34,6,21,98,31,7,4,27,13,36,47,67,37,25,2]
# mylist = [3, 5, 4, 2, 1, 6]
print (select_sort(mylist))
插入排序 , 也是類似, 基本思想, 將序列 分為已經排,未排序, 從未排序列中 依次插入到 已排序列中, 這裡 就要注意 如何尋找 恰當的位置,然後 進行 插入。 我這裡寫的方法, 拿未排的序列的乙個值 ,和 已排 序列的最後乙個值進行比較,如果已排序列 較大,交換兩個值。 之後 繼續向前比較,如果 還是大,繼續交換,如果不大了,證明已經找到了正確的位置,直接break 出來,開始下乙個關鍵字的排序 ,即可。 看一下 實現:
# coding=utf-8
'''@author:chang
插入排序 insert_sort
'''# 直接插入排序
def insert_sort(array):
# 遍歷陣列中的所有元素,其中0號索引元素預設已排序,因此從1開始
# x 為待排序列,從下標1開始取值,預設下標0是排好的。
for x in range(1, len(array)):
# 將該元素與已排序好的前序陣列依次比較,如果該元素小,則交換
# range(x-1,-1,-1):從x-1倒序迴圈到0 x-1 x-2 x-3 --> 0
for i in range(x-1, -1, -1):
# 判斷:如果符合條件則交換
if array[i] > array[i+1]:
array[i], array[i+1] = array[i+1], array[i]
else:
break
return array
if __name__ == '__main__':
# mylists = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3]
# mylists = [1, 34, 6, 21, 98, 31, 7, 4, 56, 59, 27, 13, 36, 47, 67, 37, 25, 2]
mylists = [1, 4, 7, 1, 5, 25, 3, 85, 34, 75, 23, 75, 2, 0]
print(insert_sort(mylists))
快速排序, 這個 稍微有點複雜 ,只要理解 partition, 和遞迴 的概念, 就很容易理解了, 其實 把乙個待排序列分成兩組,首先 選乙個key 作為基準點,通過partition 把 前面的key,都小於 基準點, 後面的都大於基準點, 這樣 就是乙個partition的過程。最後 partition要返回乙個位置,就是 就保證了 上面說的 那個特點,前面的小於基準點,後面的大於基準點。
這樣之後, 對前面的一段待排 序列, 在進行 partition,後面的一段 也在進行partition,一直到待排序列長度 為1 , 這樣就全部排完了。
# coding=utf-8
'''@author:chang
快速排序 實現
quick_sort
'''def partition(array,low,high):
#基準點定位為第乙個元素
point = array[low]
while low < high:
#將大於基準點的數放於基準點的右邊
while low < high and array[high] >= point:
#移到前乙個元素
high = high - 1
#當不滿足大於基準點,交換基準點
array[low],array[high] = array[high],array[low]
while low < high and array[low] < point:
low = low + 1
#當不滿足小於基準點,交換基準點
array[low], array[high] = array[high], array[low]
#返回樞軸的位置。。。重要
return low
#外層函式,由於快速排序需要三個引數,為零滿足只要兩個引數,定義乙個外層函式呼叫實際操作的函式
def quick_sort(array,length):
q_sort(array,0,length-1)
def q_sort(array,low,high):
if low < high:
point = partition(array,low,high)
q_sort(array,low,point-1)
q_sort(array,point+1,high)
if __name__ == '__main__':
mylists = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3]
quick_sort(mylists,len(mylists))
print (mylists)
python中的排序
coding utf 8 from operator import itemgetter a 1,4,3,2,5 b 5,2,3 6,0,1 1,3,2 print sorted a 預設為公升序排序 print sorted a,reverse true reverse為true時,降序排列 pr...
python中的排序
1.sort.py 2.這個類用來演示如何對自定義物件進行排序 3.class sortobj 4.a 0 5.b 6.def init self,a,b 7.self.a a 8.self.b b 9.def printab self 10.print self.a,self.b 11.12.演示...
python中的氣泡排序 Python中的氣泡排序
氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演...