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)


 

posted @ 2019-07-25 18:00  殇夜00  阅读(6)  评论(0)    收藏  举报