Python中的排序

2021-08-09 07:15:29 字數 3694 閱讀 8428

最近在學習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 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演...