python資料結構第五天

2021-09-28 15:25:18 字數 3097 閱讀 8367

排序演算法的穩定性

穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。

假設以下的數對將要以他們的第乙個數字來排序。

(4, 1)  (3, 1)  (3, 7)(5, 6)
在這個狀況下,有可能產生兩種不同的結果,乙個是讓相等鍵值的紀錄維持相對的次序,而另外乙個則沒有:

(3, 1)  (3, 7)  (4, 1)  (5, 6)  (維持次序)

(3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)

那麼低乙個就是穩定的,第二個就是不穩定的

def bubble_sort(alist):

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

# j表示每次遍歷需要比較的次數

for i in range(j):

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

alist[i],alist[i+1]=alist[i+1],alist[i]

li = [54,26,93,17,77,31,44,55,20]

bubble_sort(li)

print(li)

輸出

[17, 20, 26, 31, 44, 54, 55, 77, 93]
def selection_sort(alist):

n=len(alist)

for i in range(n-1):

#i代表將要選擇第i個位置的元素

min_index=i

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

#j代表本次選擇從第j個開始

if alist[min_index]>alist[j]:

min_index=j

if min_index!=i:

alist[min_index],alist[i]=alist[i],alist[min_index]

alist = [54,226,93,17,77,31,44,55,20]

selection_sort(alist)

print(alist)

輸出結果:

[17, 20, 31, 44, 54, 55, 77, 93, 226]
def insert_sort(alist):

for i in range(1,len(alist)):

#i是指每次插入需要比較的次數

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

#j是指從第j個向前比較,一直比較到第0個

if alist[j]輸出

[17, 26, 31, 44, 54, 55, 77, 93, 20]

希爾排序是一種高階的快速排序,每次排序的元素是列表中以某個數為間隔的子列表

def shell_sort(arr):

n=len(arr)

gap=n//2

##從乙個比較大的gap開始,然後縮小gap

while gap>0:

#以gap為間隙進行插入排序,arr[0...gap-1]已經在即將被插入的序列中

#每次新增乙個元素進行以此gap的插入排序,直到最後乙個元素

for i in range(gap,n):

temp=arr[i]

#臨時儲存arr[i],將arr[i]新增到合適的位置

j=iwhile j-gap>=0 and arr[j-gap]>temp:

arr[j]=arr[j-gap]

j-=gap

#一直將比temp大的元素移動到arr[j+gap]上

arr[j]=temp

gap=gap//2

alist = [6,10,1,3,5,11,2,14]

shell_sort(alist)

print(alist)

[1, 2, 3, 5, 6, 10, 11, 14]
def quick_sort(arr,start,end):

if start>=end:

return

#退出迴圈的條件

mid=arr[start]

low=start

high=end

while lowmid:

high-=1

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

arr[low]=arr[high]

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

遞迴方式

def binary_search(arr,item):

if len(arr)==0:

return

else:

mid=len(arr)//2

if arr[mid]==item:

return true

else:

if item非遞迴方式:

def binary_search(arr,item):

l=0r=len(arr)-1

while l<=r:

mid=(l+r)//2

if arr[mid]==item:

return true

elif item

r=mid-1

else:

l=mid+1

return false

testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]

print(binary_search(testlist, 3))

print(binary_search(testlist, 13))

false

true

資料結構第五天

1.氣泡排序 氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。步驟 比較相鄰的元素。如果第乙個比第二個大,就交...

資料結構 第五天 佇列

只允許在一端進行插入操作,而在另一端進行刪除操作的線性表,即是一種先進先出 fifo 的線性表。抽象資料型別 adt 佇列 queue data 元素具有相同的型別,相鄰的元素具有前驅和後繼的關係 operation initqueue q 初始化操作,建立乙個空佇列q destroyqueue q...

Python學習第五天

1 關於print,使用print方法列印多個表示式也是可行的 print age 12 age 12 2 別名,如果需要引用的方法名出現重複時可以使用別名 from math import sqrt as foobar 3 多個賦值操作可以同時進行 x,y,z 1,2,3 print x,y,z ...