面試 排序 一 交換排序

2021-09-11 17:08:03 字數 1536 閱讀 3565

一、交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那些偶對,直到全部滿足為止。

常見的交換排序有氣泡排序和快速排序

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 步驟 比較相鄰兩個元素,如果前乙個比後乙個大,則交換位置 從第乙個元素一直比較到最後乙個元素,這時最後乙個元素的值是最大的 減掉最後乙個元素,...