排序算法的python实现

冒泡排序

比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。
def bubble_sort(list):
    if list != 0:
        if len(list) == 1:
            pass
        else:
            for i in range(len(list)):
                is_swap = 0
                for j in range(len(list)-i-1):
                    if list[j] > list[j+1]:
                        # 交换j,j+1位置上的数字
                        is_swap = 1
                        list[j],list[j+1]=list[j+1],list[j]
                if not is_swap:
                    return
插入排序

将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
def insert_sort(list):
    if list != 0:
        if len(list) == 1:
            pass
        else:
            for i in range(1,len(list)):
                j = i-1
                while(j>=0):
                    if list[j] > list[j+1]:
                        # 交换j,j+1位置上的数字
                        list[j],list[j+1]=list[j+1],list[j]
                    j-=1

快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终达到整个数据变成有序序列。
def quick_sort(a,start,end):
    #print(start, end)
    if start >= end:
        return
    pivot = a[start]
    #print(pivot)
    low = start
    high = end
    while start < end:
        while start < end and a[end] >= pivot:
            end -= 1
        a[start] = a[end]
        while start < end and a[start] <= pivot:
            start += 1
        a[end] = a[start]
    a[end] = pivot
    #print(a)
    quick_sort(a, low, start - 1)
    quick_sort(a, end + 1, high)

测试程序:针对不同算法设计测试程序,单次程序执行时间不是固定的。

if __name__ == '__main__':
    list1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    print("原始数据:")
    print(list1)
    start = time.clock()
    start1 = datetime.datetime.now()
    bubble_sort(list1)
    end1 = datetime.datetime.now()
    end = time.clock()
    print("排序后的数据:")
    print(list1)
    print('冒泡排序耗时: %s 秒'%(end - start))
    print('冒泡排序耗时:')
    print(end1-start1)

    list1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    print("
原始数据:")
    print(list1)
    start = datetime.datetime.now()
    insert_sort(list1)
    end = datetime.datetime.now()
    print("排序后的数据:")
    print(list1)
    print("插入排序耗时:")
    print(end - start)

    list1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    print("
原始数据:")
    print(list1)
    start = time.clock()
    quick_sort(list1, 0, len(list1)-1)
    end = time.clock()
    print("排序后的数据:")
    print(list1)
    print('快速排序耗时: %s 秒' % (end - start))
原文地址:https://www.cnblogs.com/jerry116/p/8667812.html