python排序演算法的幾種實現

2021-09-27 03:42:57 字數 2303 閱讀 3498

#1、氣泡排序

def bubble_sort(arr):

n=len(arr)

for i in range(n):

for j in range(n-i-1):

if arr[j]>arr[j+1]:

arr[j],arr[j+1]=arr[j+1],arr[j]

return arr

a=[1,4,7,3,2,24,33]

sorted_list=bubble_sort(a)

print(sorted_list)

#2、選擇排序

def select_sort(arr):

n=len(arr)

for i in range(n):

min_idx=i

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

if arr[min_idx]>arr[j]:

min_idx=j

arr[i],arr[min_idx]=arr[min_idx],arr[i]

return arr

b=[9,34,1,5,8,8]

sorted_list=select_sort(b)

print(sorted_list)

#3、插入排序

def insert_sort(arr):

n=len(arr)

for i in range(1,n):

temp=arr[i]

j=i-1

while j>=0 and temp0 and len(right)>0:

#為了保持穩定性,當遇到相等的時候優先把左側的數放進結果列表,因為left本來也是大數列中比較靠左的

if left[0]<=right[0]:

else:

#while迴圈出來之後 說明其中乙個陣列沒有資料了,我們把另乙個陣列新增到結果陣列後面

result+=left

result+=right

return result

d=[9,78,5,3,2,1,4,7,9]

sorted_list=merge_sort(d)

print(sorted_list)

#5\快速排序

def quick_sort(arr,start,end):

# 遞迴的退出條件

if start>=end:

return

# 設定起始元素為要尋找位置的基準元素

mid=arr[start]

# low為序列左邊的由左向右移動的游標

low=start

# high為序列右邊的由右向左移動的游標

high=end

while low=mid:

high-=1

# 將high指向的元素放到low的位置上

arr[low]=arr[high]

# 如果low與high未重合,low指向的元素比基準元素小,則low向右移動

while low0:

for i in range(dist,n):

temp=arr[i]

j=iwhile j>=dist and temparr[j]=arr[j-dist]

j=j-dist

arr[j]=temp

dist=dist//2

return arr

blist=[23,1,3,4,77,2,3,1,0]

shell_sort(blist)

print(blist)

#6\堆排序

def heapify(arr,n,i):

largest=i

l=2*i+1

r=2*i+2

if llargest=l

if rlargest=r

if largest!=i:

arr[i],arr[largest]=arr[largest],arr[i]

heapify(arr,n,largest)

def heap_sort(arr):

n=len(arr)

#建立大頂堆

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

heapify(arr,n,i)

#乙個個交換元素

for i in range(n-1,0,-1):

arr[i],arr[0]=arr[0],arr[i]

heapify(arr,i,0)

clist=[12,2,1,34,7,4]

heap_sort(clist)

print(clist)

python實現的幾種排序演算法

此演算法為插入排序中的 直接插入排序 當然這是對於n很小的情況,但是當n很大的時候,可以用折半插入 就是對於直接插入排序的乙個改進,對於前乙個序列用直接插入排序 後面就不用這樣了,因為前面已經是乙個有序序列,可以折半方式提高 查詢效率 a b none 插入列表 insert list 7,3,5,...

Python實現幾種簡單的排序演算法

概念 為乙個無序的列表排成有序的 實現過程描述 公升序 1.比較相鄰的元素,如果第乙個比第二個大,就交換他們的位置 2.對每一對相鄰元素重複1的工作,從開始第一隊到最後一對,最後結束的時候最大的數會在後面 3.針對所有元素重複1,2的工作,除了最後乙個數,因為最後的數最大,省略這個過程 4.持續每次...

基於python的幾種排序演算法的實現

usr bin python3 coding utf 8 time 2019 3 28 10 26 author yosef 夜雨聲煩 email wurz529 foxmail.com file sort.py software pycharm defbubble sort arr 氣泡排序 pa...