# coding=utf-8 # 冒泡排序 ''' 冒泡排序算法的運作如下: 比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。 ''' def bubble_sort(alist): for j in range(len(alist)-1, 0, -1): # j表示每次遍歷需要比較的次數,是逐漸減小的 for i in range(j): if alist[i] > alist[i+1]: alist[i], alist[i+1] = alist[i+1], alist[i] li = [54,26,93,17,77,31,44,55,20] bubble_sort(li) print(li) a = [5, 6, 3, 2, 1, 65, 2, 0, 8, 0] # bubble_sort(a) # print(a)
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
# coding=utf-8 # 桶排序算法 ''' 桶排序的基本思想是將一個數據表分割成許多buckets,然後每個bucket各自排序,或用不同的排序算法, 或者遞歸的使用bucket sort算法。也是典型的divide-and-conquer分而治之的策略。 它是一個分佈式的排序,介於MSD基數排序和LSD基數排序之間 1、桶排序是穩定的 2、桶排序是常見排序裏最快的一種, 大多數情況下比快排還要快 3、桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序算法 ''' def bucket_sort(a): max_num = max(a) print(max_num) bucket = [0]*(max_num + 1) print('bucket = ', bucket) for i in a: bucket[i] += 1 print('bucket = ', bucket) sort_num = [] for j in range(len(bucket)): print('*' * 20) print('j 1 = %s -- bucket[j] = %s'% (j, bucket[j]) ) if bucket[j] != 0: for k in range(bucket[j]): print('j = ', j) sort_num.append(j) print('sort_num = ', sort_num) print('sort_num = ', sort_num) bucket = [2, 1, 2, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] a = [5, 6, 3, 2, 1, 65, 2, 0, 8, 0] bucket_sort(a)