排序演算法二(冒泡)(C Python)

2021-08-11 03:00:27 字數 2695 閱讀 3750

時間複雜度o(n2),空間複雜度o(1),該排序演算法穩定!

int swap(int a,int i,int j)

void bubblesort(int a,int n)

} }}

class bslist:

def __init__(self, lis = none):

self.lis = lis

def bubble_sort_******(self):

length = len(self.lis)

for i in range(length):

for j in range(i + 1, length):

if self.lis[i] > self.lis[j]:

self.lis[i], self.lis[j] = self.lis[j], self.lis[i]

def bubble_sort(self):

length = len(self.lis)

for i in range(length -1,0,-1):

count = 0

for j in range(0,i):

if self.lis[j] > self.lis[j + 1]:

self.lis[j],self.lis[j + 1] = self.lis[j + 1],self.lis[j]

count += 1

if count == 0:

return

def __str__(self):

ret = ""

for i in self.lis:

ret += " %s" %i

return ret

if __name__ == "__main__":

bslist = bslist([4,1,7,2,9,0,3,2,5])

bslist.bubble_sort_******()

print(bslist)

bslist2 = bslist([4, 1, 7, 2, 10, 0, 3, 2, 5])

bslist2.bubble_sort()

print(bslist2)

注意在python實現的排序演算法中,第一種與c實現的沒有區別,時間複雜度為o(n^2);在第二種實現方式中,引入變數count,該變數用於當原數列為有序時,直接返回,減少排序時間!最理想的情況下時間複雜度為o(n)!

這裡說的堆是指的一種資料結果,這個資料結果其實就是完全二叉樹,對於完全二叉樹,則除了葉子結點,別的結點都是由兩個孩子的,分別是左孩子和右孩子,如果乙個節點為i,則它的左孩子為2i+1,右孩子為2i+2。如果不理解可以看上面那個部落格!它對整個過程作了詳細的說明。

時間複雜度o(nlogn),空間複雜度 o(1),是不穩定的!注意,堆排序屬於氣泡排序的高階版!

void heapify(int a,int i,int size)} 

int buildheap(int a,int n)

void heapsort(int a,int n)

}

class heapsort:

def __init__(self,lis):

self.lis = lis

def adjust_heap(self,lis,i,size):

lchild = 2 * i + 1

rchild = 2 * i + 2

max = i

if i < size // 2:

if lchild < size and self.lis[lchild] > self.lis[max]:

max = lchild

if rchild < size and self.lis[rchild] > self.lis[max]:

max = rchild

if max != i:

self.lis[max],self.lis[i] = self.lis[i],self.lis[max]

self.adjust_heap(self.lis,max,size)

def build_heap(self,lis,size):

for i in range(0,(size//2))[::-1]: #注意此處的寫法,//是取整的意思

self.adjust_heap(lis,i,size)

def heap_sort(self,lis):

size = len(self.lis)

self.build_heap(lis,size)

for i in range(0,size)[::-1]:

self.lis[0],self.lis[i] = self.lis[i],self.lis[0]

self.adjust_heap(lis,0,i)

def __str__(self):

ret = ""

for i in self.lis:

ret += " %s" %i

return ret

def main():

bslist = heapsort([4, 1, 7, 2, 9, 0, 3, 2, 5])

bslist.heap_sort(bslist)

print(bslist)

氣泡排序(C Python)

begin 1 氣泡排序思想 公升序排序 如 a 9,6,8,7,5,3 i 0第一趟排序 3與5比較,3和5交換位置,a 9,6,8,7,3,5 j len 1 3與7比較,3和7交換位置,a 9,6,8,3,7,5 j len 2 3與8比較,3和8交換位置,a 9,6,3,8,7,5 j le...

排序演算法(二) 氣泡排序

每一趟排序 例如第 i 趟,其中 i 0,1,n 2 依次比較相鄰兩個資料元素,如果發生逆序,則交換之 待排資料的最大值 沉 到待排資料的最底部,比如 i 0 時,為第 1 趟排序,資料元素最大者將被交換到最後乙個位置 i 1 時,為第 2 趟排序,資料元素次大者將被交換到最後第二個位置 直至全部待...

python排序演算法 二 氣泡排序演算法

實現方法二 實現方法三 測試與對比 氣泡排序複雜度分析 對順序表 data 作交換排序 氣泡排序初級版 這段 嚴格意義上說,不算是標準的氣泡排序演算法,因為它不滿足 兩兩比較 相鄰記錄 的氣泡排序思想,它更應該是最最簡單的交換排序而已。它的思路就是讓 每乙個關鍵字,都和它後面的每乙個關鍵字比較,如果...