排序的方法主要有:冒泡,選擇,插入,歸併,快速排序,還有堆排序(前面已經寫過,這裡就不涉及了)
下面依次對每個排序演算法進行python實現:
氣泡排序從小到大排序:一開始交換的區間為0~n-1,將第1個數和第2個數進行比較,前面大於後面,交換兩個數,否則不交換。再比較第2個數和第三個數,前面大於後面,交換兩個數否則不交換。依次進行,最大的數會放在陣列最後的位置。然後將範圍變為0-n-2,陣列第二大的數會放在陣列倒數第二的位置。依次進行整個交換過程,最後範圍只剩乙個數時陣列即為有序。
1.2 **
##這裡實現的是從小到大排
def bubblesort(seq=none):
num=len(seq)
for i in range(num):
for j in range(num-i-1):
if seq[j]一開始從0-n-1區間上選擇乙個最小值,將其放在位置0上,然後在1~n-1範圍上選取最小值放在位置1上。重複過程直到剩下最後乙個元素,陣列即為有序。
def selectsort(seq=none):
num=len(seq)
for i in range(num):
min_index=i
for j in range(i+1,num):
if seq[min_index]>seq[j]:
min_index=j
seq[min_index],seq[i]=seq[i],seq[min_index]
return seq
if __name__=="__main__":
#列印結果為:[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(selectsort([10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 11, 15, 0, 12, 14, 13]))
首先位置1上的數和位置0上的數進行比較,如果位置1上的數大於位置0上的數,將位置0上的數向後移一位,將1插入到0位置,否則不處理。位置k上的數和之前的數依次進行比較,如果位置k上的數更大,將之前的數向後移位,最後將位置k上的數插入不滿足條件點,反之不處理
def insertionsort(seq=none):
n=len(seq)
for i in range(1,n):
x=seq[i]
for j in range(i,-1,-1):
if x首先讓陣列中的每乙個數單獨成為長度為1的區間,然後兩兩一組有序合併,得到長度為2的有序區間,依次進行,直到合成整個區間。
def mergesort(seq=none):
n=len(seq)
if n<2:
return seq
left=mergesort(seq[:n//2])
right=mergesort(seq[n//2:])
res=merge(left,right)
return res
def merge(left,right):
if not left:
return right
if not right:
return left
result=
i,j=0,0
while(i在陣列中隨機選乙個數(預設陣列首個元素),陣列中小於等於此數的放在左邊,大於此數的放在右邊,再對陣列兩邊遞迴呼叫快速排序,重複這個過程。
def quicksort(seq,start,end):
if startval:
end-=1
seq[start]=seq[end]
while start**演示鏈結:
資料結構 排序問題 各種排序哦
這兩天一直總結排序問題,然後話不多啦,直接上 最主要的是要學會快速排序和氣泡排序,其它排序要熟練即可。include include define datatype int void insertsort datatype a,datatype len void biinsertsort datat...
資料結構之各種排序的比較
一 直接插入排序 演算法簡潔,但是只有當待排元素n比較少的時候效率才高 所需空間 乙個當前元素的哨兵array 0 即可 最壞的情況 逆序 總的比較次數為n n 1 2,記錄的移動次數也為n n 1 2 最好的情況 正序 比較次數為n 1,記錄移動次數為0 由此可以推斷出插入排序演算法的平均時間為o...
資料結構 各種排序演算法的比較
一 實驗目的 實現常用的排序演算法,加深對這些演算法的理解,以後可以將這些演算法應用到實際問題的解決上。二 實驗題目 排序是在實際問題中經常用到的演算法,快速 選擇和插入三種排序演算法是排序演算法中最簡單的也是最常用到的,實現這三種演算法,在不同的數值串行上執行,然後比較三種方法的空間複雜度和時間複...