Python 排序問題小結

2021-09-13 17:42:07 字數 3341 閱讀 7762

1、排序演算法效能總結

排序方法平均時間複雜度最差時間複雜度最好時間複雜度空間複雜度穩定性

選擇排序

o(n^2)

o(n^2)

o(n^2)

o(1)

不穩定氣泡排序

o(n^2)

o(n^2)

o(n)

o(1)

穩定雙向氣泡排序

o(n^2)

o(n^2)

o(n)

o(1)

穩定插入排序

o(n^2)

o(n^2)

o(n)

o(1)

穩定希爾排序

o(n^1.3)

o(n^2)

o(n)

o(1)

不穩定歸併排序

o(nlogn)

o(nlogn)

o(nlogn)

o(n)

穩定快排

o(nlogn)

o(n^2)

o(nlogn)

o(logn)

不穩定2、幾點疑問,以及我個人覺得比較好的解答:

3、po**:

#1、選擇排序

def selection_sort(list_x):

for i in range(0, len(list_x)):

min_index = i

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

if list_x[j] < list_x[min_index]:

min_index = j

if i != min_index:

list_x[i], list_x[min_index] = list_x[min_index], list_x[i]

return list_x

#2、氣泡排序

def bubble_sort(list_x):

n = len(list_x)

for i in range(n-1):

count = 0

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

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

list_x[j], list_x[j+1] = list_x[j+1], list_x[j]

count += 1

if count == 0:

break

return list_x

#3、雙向氣泡排序(雞尾酒排序)

def bidirectionalbubble_sort(x):

j = 0

while j <= len(x)//2:

flag = false

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

if x[i]>x[i+1]:

x[i], x[i+1] = x[i+1], x[i]

flag=true

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

if x[i]=0:

x[j], x[j+1] = x[j+1], x[j]

j -= 1

x[j+1] = item

return x

#5. 希爾排序

## 與插入排序的不同之處在於,它會優先比較距離較遠的元素

## 排序的本質是消除逆序對,優先比較距離較遠的元素,使得一次交換能夠消除乙個以上的逆序對

def shell_sort(alist):

n = len(alist)

gap = n // 2

while gap >= 1:

for j in range(gap, n):

i = j

while (i - gap) >= 0:

if alist[i] < alist[i - gap]:

alist[i], alist[i - gap] = alist[i - gap], alist[i]

i -= gap

else:

break

gap //= 2

#6. 歸併排序

def merge (a, b):

help =

i = j = 0

while i < len(a) and j < len(b):

if a[i] < b[j]:

i += 1

else:

j += 1

if i == len(a):

for num in b[j:]:

else:

for num in a[i:]:

return help

def merge_sort(alist):

if len(alist) <= 1:

return alist

mid_index = len(alist) // 2

left = merge_sort(alist[: mid_index])

right = merge_sort(alist[mid_index :])

return(merge(left, right))

#7. 快排

def quick_sort(alist):

mid_index = len(alist) // 2

if mid_index == 0:

return alist

mid =

left =

right =

for i in range(len(alist)):

if alist[i] < alist[mid_index]:

elif alist[i] == alist[mid_index]:

else:

return quick_sort(left)+mid+quick_sort(right)

if __name__ == '__main__':

list_a = [1, 5, 6, 2, 1, 9, 3, 8, 9, 12]

print(bubble_sort(list_a))

print(selection_sort(list_a))

print(bidirectionalbubble_sort(list_a))

print(insert_sort(list_a))

print(merge_sort(list_a))

print(quick_sort(list_a))

排序演算法小結 python 實現

每次將乙個待排元素按照其大小排到合適的位置 definsertsort value n len value for i in range 1,n temp value i print temp j i 1 while j 0 and temp value j value j 1 value j j ...

python小結 python小結

c python33新增到你的path 環境變數中,你可以在dos 視窗中 輸入以下命令 set path path c python33 id 方法的返回值就是物件的記憶體位址。在 行 首行 後插入至少一行特殊的注釋行來定義原始檔的編碼。coding encoding sys.modules 模組...

python解決排序問題

已知有以下列表 員工編號,姓名,基本工資,獎金,住房補助,五險一金,其他扣款,專項附加扣除 incomelist 10932 張珊 15000.00 4000.00 2300.00 980.00 300.00 1000.00 10933 李思 12000.00 5000.00 2600.00 890...