• python实现排序算法


    冒泡排序(Bubble Sort)

    """
    冒泡排序:让子序列中的最大元素不断沉底,达到排序的目的。
    冒泡排序一共经过N-1次遍历,其中第i次遍历前N-i个元素(第i+1到N个元素已经排序完毕),将第i大的元素移动到N-i的位置
    """
    lists = [2, 4, 1, 3, 0, 100, 23, 60]
    
    for i in range(len(lists) - 1):
        for j in range(0, len(lists) - i - 1):
            lists[j], lists[j + 1] = min(lists[j], lists[j + 1]), max(lists[j], lists[j + 1])
    
    # 优化
    # 如果进行某一趟排序时并没有进行数据交换,则说明所有数据已经有序,可立即结束排序,避免不必要的比较过程
    
    for i in range(len(lists) - 1):
        flag = False
        for j in range(len(lists) - 1 ,i,-1):
            if lists[j] < lists[j - 1]:
                flag = True
                lists[j],lists[j-1] = lists[j-1],lists[j]
        if not flag:
            break
    
    print(lists)
    

    选择排序(Selection Sort)

    # 选择排序,每次选择一个最小的放在当前未排序序列的首位
    lists = [2, 4, 1, 3, 0, 100, 23, 60]
    
    def selection_sort(li):
    
        for i in range(len(li)):
            index = li.index(min(li[i:])) # 存储最小元素的位置,否则再次查找列表已经改变
            li[i], li[index] = li[index],li[i]
        print(li)
    
    
    selection_sort(lists)
    

    插入排序(Insertion Sort)

    插入排序

    # 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
    
    arr = [1, 12, 2, 11, 13, 5, 6, 18, 4, 9, -5, 3, 11]
    
    def insertsort(arr):
        for i in range(1, len(arr)):
            j = i
            while j > 0:
                if arr[j] < arr[j - 1]:
                    arr[j], arr[j - 1] = arr[j - 1], arr[j]
                j -= 1
        return arr
    
    
    print(insertsort(arr))

    快速排序(Quick Sort)

    快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。
    步骤为:
    挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
    分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
    递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
    arrx = [1, 12, 2, 11, 13, 5, 6, 18, 4, 2,9, -5, 3, 11]
    
    
    def quick_sort(arr):
        if len(arr) < 2:
            return arr
        else:
            pivot = arr[0]
            small_arr = [i for i in arr[1:] if i < pivot]
            big_arr = [i for i in arr[1:] if i >= pivot]
            return quick_sort(small_arr) + [pivot] + quick_sort(big_arr)
    
    
    print(quick_sort(arrx))
    

      



  • 相关阅读:
    npm 设置淘宝镜像
    JS字符串首字母大写
    类与面向对象基础(三)
    (转)php简单工厂模式实例讲解
    类与面向对象基础(二)
    类与面向对象基础(一)
    php连接数据库
    php中使用指针进行函数操作
    PHP基础之数组
    PHP正则表达式
  • 原文地址:https://www.cnblogs.com/songdanlee/p/11228989.html
Copyright © 2020-2023  润新知