演算法:二進位制中1的個數
阿新 • • 發佈:2021-01-03
氣泡排序基本思想
對於列表a依次比較兩個相鄰元素的大小,若a[j]大於a[j+1]則進行交換,第一趟把最大的數換到最後,依次類推生成有序的列表。
N個元素的列表要排序完成,需N-1趟排序(例:如果N是3(a = [10,5,2]),那麼需要2趟依次把10和5進行移動生成有序列表[2,5,10])。
每一趟排序,就會少比較一次,因為每進行一趟排序都會找出餘下列表中的一個較大值
每i趟的排序次數為(N-i-1)次,可以用雙重迴圈語句,外層控制迴圈多少趟,內層控制每一趟的迴圈次數。
氣泡排序預設升序排列,如果需要降序則把內層迴圈中的>號改成<號
a = [10,5,2,4,1,0] c= 0 print(" %s" % a) for i in range(len(a)-1): print("Outer Loop:%d" % i) for j in range(len(a)-1-i): print(" Inner Loop:%d" % j) if a[j] > a[j+1]: a[j+1], a[j] = a[j], a[j+1] print(" %s" % a) c += 1 print(c)
輸出結果:
[10, 5冒泡演算法時間複雜度: 最優時間複雜度O(n) :正序情況,只需要一次外層迴圈,n-1次比較 最壞時間複雜度O(n2):逆序情況,需要n-1一次外層迴圈,每i趟外層迴圈執行n-1-i次內層迴圈, 2, 4, 1, 0] Outer Loop:0 Inner Loop:0 [5, 10, 2, 4, 1, 0] Inner Loop:1 [5, 2, 10, 4, 1, 0] Inner Loop:2 [5, 2, 4, 10, 1, 0] Inner Loop:3 [5, 2, 4, 1, 10, 0] Inner Loop:4 [5, 2, 4, 1, 0, 10] Outer Loop:1 Inner Loop:0 [2, 5, 4, 1, 0, 10] Inner Loop:1 [2, 4, 5, 1, 0, 10] Inner Loop:2 [2, 4, 1, 5, 0, 10] Inner Loop:3 [2, 4, 1, 0, 5, 10] Outer Loop:2 Inner Loop:0 [2, 4, 1, 0, 5, 10] Inner Loop:1 [2, 1, 4, 0, 5, 10] Inner Loop:2 [2, 1, 0, 4, 5, 10] Outer Loop:3 Inner Loop:0 [1, 2, 0, 4, 5, 10] Inner Loop:1 [1, 0, 2, 4, 5, 10] Outer Loop:4 Inner Loop:0 [0, 1, 2, 4, 5, 10] 15