一、交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那些偶對,直到全部滿足為止。
常見的交換排序有氣泡排序和快速排序
1.氣泡排序
1)過程:比較相鄰元素,使關鍵字較小的元素交換至關鍵字較大的元素之上,使得經過一次氣泡排序後,關鍵字最小的元素到達最頂端,接著找到第二小的元素,依次類推。
氣泡排序示意圖
2)python實現:
def sort1(a):
length = len(a) - 1
exchange = true
while length >= 1 and exchange:
exchange = false
for i in range(length):
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
exchange = true
length -= 1
return a
3)複雜度
空間複雜度:o(1)
時間複雜度:
平均 o(
最好 o(n) :初始資料序列正序時
最壞 o( :初始資料序列反序時
2.快速排序:是由氣泡排序改進得來的
1)過程:在待排序的n個元素中任取乙個元素(一般取第乙個元素),把該元素放入最終位置後,整個資料區間被此元素分割成兩個子區間。所有關鍵字比該元素小的放在前子區間,所有比它大的放在後子區間,並把該元素排在這兩個子區間的中間,這個過程稱作一趟快排。然對兩個子區間重複上述過程,直至每個子區間只有乙個元素為止。
快速排序示意圖
2)python實現:
def sort2(a, low, high):
if low >= high:
return
i, j = low, high
tmp = a[low]
while i < j:
while i < j and a[j] > tmp:
j -= 1
a[i] = a[j]
while i < j and a[i] <= tmp:
i += 1
a[j] = a[i]
a[i] = tmp#最後i,j指向同乙個元素
#遞迴前後半區
sort2(a, low,i-1)
sort2(a,j+1,high)
return a
3)複雜度
空間複雜度:o(log2n)
時間複雜度:
平均 o(nlog2n)
最好 o(nlog2n) :當資料隨機分布時,快排效能越好
最壞 o( :當資料接近有序時,快排效率最低
資料結構(一) 交換排序
最近只看了冒泡和快排這兩個演算法,今天面試就讓寫排序,用電腦寫,一去就讓寫 賊慌,然後面試官小姐姐真的賊好看,就是和面試官小哥談論我的簡歷,坐在我對面,看著我寫 真的賊慌。一開始本來想寫快排,因為緊張,大腦短路,滿腦子都在冒泡泡。最後還是寫了冒泡,這裡再回顧一下冒泡和快排吧,鞏固一下,免得一緊張就慌...
內部排序演算法(一) 交換排序(氣泡排序,快速排序)
這是我的博文系列 內部排序演算法 的第一篇。所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增 或遞減 次序排列起來。所謂內部排序,是指在排序過程中,若整個檔案都是放在記憶體中處理,排序時不涉及資料的內 外存交換 外排序的定義則相反 內部排序法按照策略可以劃分為五類 插入排序 選擇排序 交換排序 歸...
排序 交換排序
交換排序 利用交換位置進行排序 1 演算法思想 重複的走訪要排序的元素,依次比較相鄰兩個元素的大小,如果順序錯誤則交換這兩個元素的位置,直到不需要在比較 2 步驟 比較相鄰兩個元素,如果前乙個比後乙個大,則交換位置 從第乙個元素一直比較到最後乙個元素,這時最後乙個元素的值是最大的 減掉最後乙個元素,...