python排序算法實現

# 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)


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章