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已經為最大 或最小 然後進行第二次比較,第二輪 陣列去...