zoukankan      html  css  js  c++  java
  • 排序算法的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))
  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/jerry116/p/8667812.html
Copyright © 2011-2022 走看看