選乙個基數,把比這個數大的數放到這個數的左邊,比這個數小的放到這個數的右邊,然後在採用分治法對左右進行同樣的操作。
這個數最後所在的位置即為這個數在這組數中的大小排序。
分治法
def quicksort(ary,left,right):
if (left挖坑法
找乙個基數,然後從前面找小於基數的數去填這個坑,再從後往前找大於基數的數填剛形成的坑。
#挖坑法
def quickarray3(ary,left,right):
k=ary[right]#首先
print(ary)
i=left
j=right
while ik:
j-=1
ary[i]=ary[j]
ary[j]=k
return j
左右指標法
找乙個基數,前面找比這個數小的數,然後從後面找比這個數大的數,然後兩個數對調。
#左右指標
def quickarray2(ary,left,right):
i=left
j=right
print(left,right)
while i=ary[right]:
j-=1
ary[i],ary[j]=ary[j],ary[i]#然後兩者對換
print(ary)
ary[j],ary[right]=ary[right],ary[j]
print (ary[j])
return j
前後指標法
找乙個基數,兩個指標分別記錄當前位置cur和上乙個比基數大的數的位置pre,若當前位置比基數小,則換到前面
def quickarray(ary,left,right):
if leftk=ary[right]
cur=left
pre=cur-1
for cur in range (left,right):
if ary[cur]pre+=1
if pre!=cur:
ary[pre],ary[cur]=ary[cur],ary[pre]
ary[pre+1],ary[right]=ary[right],ary[pre+1]
print(ary)
return pre+1
用Python實現各種排序演算法
比較相鄰的元素大小,將小的前移,大的後移,就像水中的氣泡一樣,最小的元素經過幾次移動,會最終浮到水面上。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 li...
各種排序演算法的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...