python實現插入排序 氣泡排序 快速排序

2021-09-01 15:41:32 字數 1836 閱讀 2125

a= [2,4,2,6,5,8,5,56,45,3,23]

插入排序類似整理撲克牌,將每一張牌插到其他已經有序的牌中適當的位置。

插入排序由n-1趟排序組成,對於p=1到n-1趟,插入排序保證從位置0到位置p上的元素為已排序狀態。

簡單的說,就是插入排序總共需要排序n-1趟,從index為1開始,講該位置上的元素與之前的元素比較,放入合適的位置,這樣迴圈下來之後,即為有序陣列。

#插入排序

def insertsort(a):

lenlist = len(a)

for i in range(1,lenlist):

x = a[i]

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

if x < a[j-1]:

a[j] = a[j-1]

else:

break

a[j] = x

print(a)

insertsort(a)

效率:如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序演算法的時間複雜度為o(n^2)

1)、從第乙個資料開始,與第二個資料相比較,如果第二個資料小於第乙個資料,則交換兩個資料的位置。

2)、指標由第乙個資料移向第二個資料,第二個資料與第三個資料相比較,如果第三個資料小於第二個資料,則交換兩個資料的位置。

3)、依此類推,完成第一輪排序。第一輪排序結束後,最大的元素被移到了最右面。

4)、依照上面的過程進行第二輪排序,將第二大的排在倒數第二的位置。

5)、重複上述過程,沒排完一輪,比較次數就減少一次。

#氣泡排序

def msort(a):

length = len(a)

for i in range(length):

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

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

temp = a[j]

a[j] = a[j+1]

a[j+1] = temp

print(a)

msort(a)

效率:n個元素需要排序n-1輪;

第i輪需要比較n-i次;

n個元素排序,需要比較n(n-1)/2次;

氣泡排序的演算法複雜度較高,為o(n*n)

定義乙個閾值,分別從最左面和最右面向中間遍歷元素,左面找到乙個大於閾值的資料便停止,右邊找到乙個小於閾值的資料便停止,如果此時左右兩邊都還沒有走到中間,則交換左面大於閾值的資料和右面小於閾值的資料;重複上述過程,直到左面指標和右面指標相遇,此時左面資料均小於閾值,右面資料均大於閾值,劃分結束。劃分結束後,資料仍然是無序的,但更接近於有序。

#快速排序

def quicksort(a,start,end):

if start < end:

i,j = start,end

base = a[i]

while i < j:

while (i= a[i]):

i += 1

a[j] = a[i]

a[i] = base

quicksort(a,start,i-1)

quicksort(a,j+1,end)

return a

b = quicksort(a,0,len(a)-1)

print(b)

氣泡排序,插入排序 PYTHON

氣泡排序 使用 冒泡策略 把最大的元素移動到序列最右端。在一次冒泡過程中,相鄰元素進行比較。python a 5,4,12,3,5,6,9 def bubble sort num n len num for i in range n 1,0,1 for j in range 1,i 1 if num...

Python實現氣泡排序,選擇排序,插入排序

1.python實現氣泡排序 方法1array 4,5,2,3,8,9,1 def bubblesort array sort true while sort sort false for i in range len array 1 if array i array i 1 temp array ...

python氣泡排序與插入排序演算法實現。

花費時間很多的一種排序演算法 我們有 a1,a2 an個資料,a1和a2比較 如果a1 a2 a1 a2交換位置然後a2 和 a3 比較,一直比到 an。這是一次輪迴,每次輪迴,an都是最大 或最小,根據a1 a2的判斷條件 的數第一次排序,an已經為最大 或最小 然後進行第二次比較,第二輪 陣列去...