冒泡排序
這個算法的名字由來是因為越大的元素會經交換慢慢浮’到數列的頂端。
冒泡排序的基本思想:重復走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,直到沒有再需要交換,完成排序。
冒泡排序總的平均時間復雜度為O(n2)。
冒泡排序的編程思想有兩種,浮上去和沉下來。
冒泡排序原理: 每一趟只能將一個數歸位, 如果有n個數進行排序,只需將n-1個數歸位, 也就是說要進行n-1趟操作(已經歸位的數不用再比較)
#coding:utf-8 class Sort(object): #數字大的沉下去 def bubble_sortdown(self, nums): count = len(nums) for i in range(count-1): for j in range(count-1-i): if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] print 'bubble_sortdown1:',nums #數字大的浮上去,即數字小的沉下去 def bubble_sortup(self, nums): count = len(nums) for i in range(count): for j in range(count-1-i): if nums[j] < nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] print 'bubble_sortup:', nums def bubble_sortup2(self, nums): count = len(nums) for i in range(1, count): for j in range(1, count-i + 1): if nums[j-1] < nums[j]: temp = nums[j-1] nums[j-1] = nums[j] nums[j] = temp print 'bubble_sortup2:', nums def bubble_sortup3(self, nums): count = len(nums) for i in range(count-1): for j in range(count-1-i,0,-1): if nums[j-1] < nums[j]: nums[j-1], nums[j] = nums[j], nums[j-1] print 'bubble_sortup3:',nums if __name__ == '__main__': sor = Sort() nums = [5,6,4,2,3] #要排序的列表 sor.bubble_sortdown(nums) #冒泡排序 沉 123456 sor.bubble_sortup(nums) #冒泡排序 浮 654321 sor.bubble_sortup2(nums) #冒泡排序 浮 654321 sor.bubble_sortup3(nums) #冒泡排序 浮 654321
參考: