快速排序
也是分治法。很多標準語言的排序方法,最優的演算法複雜度比較好。
原理:定乙個主元,左邊指標從左往右,右邊指標從右往左,把與主元小的元素,把主元函式和這個元素調換位置。
方案1 :缺點需要額外記憶體空間
def
quicksort
(array):if
len(array)
<2:
return array
else
: pivot_index =
0 pivot = array[pivot_index]
less_port =
[i for i in array[pivot_index+1:
]if i <=pivot]
great_port =
[i for i in array[pivot_index+1:
]if i > pivot]
return quicksort(less_port)
+[pivot]
+ quicksort(great_port)
deftest_quicksort()
:import random
seq =
list
(range(10
))random.shuffle(seq)
assert quicksort(seq)
==sorted
(seq)
方案二:
"""方案2"""
defportition
(array, beg, end)
: pivot_index = beg
pivot = array[pivot_index]
left = pivot_index +
1 right = end -
1while
true
:while left <= right and array[left]
< pivot:
left +=
1while right >= left and array[right]
>= pivot:
right -=
1if left > right:
break
else
: array[left]
, array[right]
= array[right]
, array[left]
array[pivot_index]
, array[right]
= array[right]
, array[pivot_index]
return right
deftest_portition()
: l =[4
,1,2
,8]assert portition(l,0,
len(l))==
2 l =[1
,2,3
,4]assert portition(l,0,
len(l))==
0 l =[4
,3,2
,1]assert portition(l,0,
len(l))==
3
def
quicksort_inplace
(array, beg, end)
:if beg < end:
pivot = portition(array, beg, end)
quicksort_inplace(array, beg, pivot)
quicksort_inplace(array, pivot+
1, end)
deftest_quicksort_inplace()
:import random
seq =
list
(range(10
))random.shuffle(seq)
print
(seq)
quicksort_inplace(seq,0,
len(seq)
)print
(seq)
C 資料結構與演算法揭秘17
這節我們介紹直接插入排序和希爾排序演算法,一 直接插入排序 直接插入排序 direct insert sort 的基本思想是 順序地將待排序的記錄按其關鍵碼的大小插入到已排序的記錄子串行的適當位置。子串行的記錄個數從1開始逐漸增大,當子串行的記錄個數與順序表中的記錄個數相同時排序完畢。設待排序的順序...
python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...
資料結構與演算法 python
元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...