Python實現8中常用排序演算法

2022-08-27 07:06:09 字數 3087 閱讀 6302

l = [2,6,4,7,9,1,3,5,8]

# 1.插入排序

def insert_sort(list):

n = len(list)

for i in range(1,n): # 得到索引

j = i-1 # 獲取當前元素之前的索引

temp = list[i]

while j >= 0: # 當索引大於等於時開始迴圈

if temp < list[j]: # 當list[i]元素小於之前的元素

list[j+1] = list[j] # 交換兩個元素的位置

list[j] = temp

j -= 1 # 繼續比較交換後的list[i]和再前乙個元素的大小,繼續迴圈

return list

print(insert_sort(l))

#2.氣泡排序

def bubble_sort(list):

n = len(list)

for i in range(n):

for j in range(i+1, n):

if list[i] > list[j]:

list[j], list[i] = list[i], list[j]

return list

print(bubble_sort(l))

# 3.快速排序

def quick_sort(list,low,high):

i=low

j=high

if i >= j:

return list

key=list[i]

while i < j:

# 當高位游標大於基準值時, 高位游標向左移動

while i < j and list[j]>=key:

j = j - 1

list[i]=list[j]

# 當低位游標指向的值,小於基準值時, 低位游標向右移動

while i < j and list[i]<=key:

i = i + 1

list[j]=list[i]

list[i]=key

quick_sort(list,low,i-1) # 對基準值左邊的未排序佇列排序

quick_sort(list,j+1,high)# 對基準值右邊的未排序佇列排序

return list

print(quick_sort(l, 0, len(l)-1))

#4.選擇排序

def select_sort(list):

length = len(list)

for i in range(length): # 得出全部的索引

min_index=i # 假設最小的索引

for j in range(i,length): # 獲取i之後的索引

if list[j]=list2[j]:

j=j+1

list.extend(list1[i:])

list.extend(list2[j:])

return list

print(merge_sort(l))

#6.希爾排序

def shell_sort(list):

step = int(len(list)/2)

while step > 0:

for i in range(step, int(len(list))):

while i >= step and list[i-step] > list[i]:

list[i], list[i-step] = list[i-step], list[i]

i -= step

step = int(step/2)

return list

print(shell_sort(l))

# 7.堆排序

def adjust_heap(list, i, size):

lchild = 2 * i + 1

rchild = 2 * i + 2

m = i

if i < int(size/2) and list[lchild] > list[m]:

m = lchild

if rchild < size and list[rchild] > list[m]:

m = rchild

if m != i:

list[m], list[i] = list[i], list[m]

adjust_heap(list, m, size)

def build_heap(list, size):

for i in range(0, int(size/2))[::-1]:

adjust_heap(list, i, size)

def heap_sort(list):

size = len(list)

build_heap(list, size)

for i in range(0, size)[::-1]:

list[0], list[i] = list[i], list[0]

adjust_heap(list, 0, i)

return list

print(heap_sort(l))

# 8.基數排序

import math

def radix_sort(list, radix=10):

n = int(math.ceil(math.log(max(list), radix)))

bucket = [ for i in range(radix)]

for i in range(1, n + 1):

for j in list:

del list[:]

for x in bucket:

list += x

del x[:]

return list

print(radix_sort(l))

參考: 

以上執行環境為: python3.7.0 win10

python實現常用排序

一直以來,對於排序都是比較零散的去學習和了解,用到什麼就去查什麼,本次決定把集中排序彙總記錄下。使用python是覺得語法更加靈活,可以省很多 說明,還可驗證結果 首先,我們最先接觸到也是最好理解的排序 氣泡排序 氣泡排序就是迴圈取元素,然後往後比較,如果大於後面元素則交換位置,直到比較到最後乙個,...

python中常用的模組 python中的常用模組

adodb 我們領導推薦的資料庫連線元件 bsddb3 berkeleydb的連線元件 cheetah 1.0 我比較喜歡這個版本的cheetah cherrypy 乙個web framework dbutils 資料庫連線池 django 乙個web framework docutils 用來寫文...

python實現常用排序演算法

半夜醒來,閒來無事,寫寫排序演算法,興之所致,未來得及debug,有問題自己解決。coding utf 8 created on tue may 19 00 52 47 2015 氣泡排序 插入排序 1 每一步就像在一首已經排序的撲克牌中再插入一張牌,這張牌標記為value 2 從最後一張開始比較,...