時間複雜度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 作交換排序 氣泡排序初級版 這段 嚴格意義上說,不算是標準的氣泡排序演算法,因為它不滿足 兩兩比較 相鄰記錄 的氣泡排序思想,它更應該是最最簡單的交換排序而已。它的思路就是讓 每乙個關鍵字,都和它後面的每乙個關鍵字比較,如果...