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 從最後一張開始比較,...