用Python實現各種排序演算法

2021-07-03 09:09:19 字數 2872 閱讀 2984

比較相鄰的元素大小,將小的前移,大的後移,就像水中的氣泡一樣,最小的元素經過幾次移動,會最終浮到水面上。

def bubble(list):

for i in range(len(list)):

for j in range(0,len(list)-1-i):

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

list[j],list[j+1]=list[j+1],list[j]

ifname== 'main':

list1 = [2,3,5,7,8,9,6,54,1,42]

bubble(list1)

print(list1)

2.插入排序

將乙個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢。

def insertsort(list):

if list != none:

if len(list) == 1:

pass

else:

for i in range(1,len(list)):#start with second item.

temp = list[i]

for j in range(i):

if list[j]>list[i]:

for k in range(i,j,-1):#

list[k]= list[k-1]

list[j] = temp

ifname== 'main':

list1 = [3,2,7,5,8,9,6,54,1,42]

insertsort(list1)

print(list1)

3.快速排序

(1)這裡實現第一輪排序,不妨稱第乙個元素為錨

(2)i,j分別指向待排序序列的第一和最後乙個元素

(3)j與錨比較,若大於錨則左移,直到小於錨的元素停下,與i指向元素交換,i後移

(4)接著,i與錨比較,若小於則右移,直到大於錨的元素停下,與j指向的元素交換,j前移,

(5)i,j交替移動,i==j時,錨temp到達最終位置。

l = [90,89,78,67,56,45,34,23,12,0]

def first_sort(numbers,i,j):

temp = numbers[i]

while i!=j:

while itemp:

j = j - 1

if i < j

numbers[i] = numbers[j]

i = i + 1

while i < j and numbers[i]4.選擇排序

從所有序列中先找到最小的,然後放到第乙個位置。之後再看剩餘元素中最小的,放到第二個位置……以此類推,就可以完成整個的排序工作。

def selectionsort(list):

if list != none:

for i in range(len(list)):

min = i

for j in range(i+1,len(list)):

if list[min] > list[j]:

min = j

if min != i:

list[min],list[i] = list[i],list[min]

ifname== 'main':

list1 = [2,3,5,7,8,9,6,54,1,42]

selectionsort(list1)

print(list1)

5.希爾排序

先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。

test=[9,2,3,5,7]

def shellsort(data,flag):

'''data: list,to be sorted

flag: 0->asc,1->desc

return a new sorted list

'''retdata=

#copy data to retdata

for item in data:

#sort retdata

count=len(retdata)

step=count/2;

while step>0:

i=0while i=0:

if t>=retdata[k]:

retdata.insert(k+1, t)

break

k=k-step

if k < 0:

retdata.insert(0, t)

#desc

elif flag==1:

while k>=0:

if t<=retdata[k]:

retdata.insert(k+1, t)

break

k=k-step

if k<0:

retdata.insert(0, t)

j=j+step

i=i+1

step=step/2

return retdata

data=shellsort(test,0)

print 'asc:',data

data=shellsort(test,1)

print 'desc:',data

推薦拓展閱讀

各種排序演算法的Python實現

最近剛剛接觸python,python語法簡潔清晰,具有很好的易讀性,編寫的演算法可以很容易的看出其本質。故而用python編寫演算法,既可以熟悉演算法,又可以練習python,何樂而不為呢?插入排序 def insertsort lists for i in range 0,len lists 1...

各種排序演算法實現

1 選擇排序 最壞情況 時間複雜度為o n 2 平均時間複雜度o n 2 最好情況 時間複雜度為o n 2 最差空間複雜度 需要輔助空間o 1 不是穩定排序 實現 void swap int a,int b void selectionsort int a,int n if k i swap a i...

各種排序演算法實現

2016年7月7日20 30 37 排序的目的 查詢 排序是查詢的前提 google搜尋 分類 冒泡 穩定o n 2 插入 穩定o n 2 從前往後依次插入到前面的有序部分,始終保持前面部分有序 選擇 n 2 先從所有序列中選擇最小的數字與第乙個數字互換,再從餘下的序列中尋找次最小值與第二個數字互換...