zoukankan      html  css  js  c++  java
  • Python 算法

    对几种算法做说明:

    名称

    复杂度

    说明

    备注

    冒泡排序
    Bubble Sort

    O(N*N)

    将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮

    插入排序

    Insertion sort

    O(N*N)

    逐一取出元素,在已经排序的元素序列中从后向前扫描,放到适当的位置

    起初,已经排序的元素序列为空

    选择排序

    O(N*N)

    首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此递归。

    找最小元素排序

    快速排序

    Quick Sort

    O(n *log2(n))

    先选择中间值,然后把比它小的放在左边,大的放在右边(具体的实现是从两边找,找到一对后交换)。然后对两边分别使用这个过程(递归)。

    确定中间值和索引的排序

    堆排序HeapSort

    O(n *log2(n))

    利用堆(heaps)这种数据结构来构造的一种排序算法。堆是一个近似完全二叉树结构,并同时满足堆属性:即子节点的键值或索引总是小于(或者大于)它的父节点。

    近似完全二叉树

    希尔排序

    SHELL

    O(n1+)

    0<£<1

    选择一个步长(Step) ,然后按间隔为步长的单元进行排序.递归,步长逐渐变小,直至为1.

    箱排序
    Bin Sort

    O(n)

    设置若干个箱子,把关键字等于 k 的记录全都装入到第k 个箱子里 ( 分配 ) ,然后按序号依次将各非空的箱子首尾连接起来 ( 收集 ) 。

    分配排序的一种:通过" 分配 " 和 " 收集 " 过程来实现排序

    快速排序的实现:

    #!/usr/bin/env python
    #coding:utf-8
    import random
    import time
    t_a = time.time()
    def get_sort_index(lis, a, b):
    """
    每调用一次完成一次对中间值的排序,共需调用log2(b-a)次
    """ tmp
    = lis[a] while a < b: while a < b and lis[b] >= tmp: b -= 1 lis[a] = lis[b] while a < b and lis[a] <= tmp: a += 1 lis[b] = lis[a] lis[a] = tmp return a def quick(li, s, e): if s < e: mid = get_sort_index(li, s, e) quick(li, s, mid-1) quick(li, mid+1, e) l = list(range(100)) random.shuffle(l) print(l) quick(l, 0, len(l)-1) print("after quick: %.2f"%(time.time() - t_a)) print(l)

    https://www.cnblogs.com/wulaoer/p/5507174.html

    https://blog.csdn.net/ZhangQiye1993/article/details/81532103

  • 相关阅读:
    C# 高级编程语言
    unity ForceMode
    UnityError 切换场景灯光变黑问题解决
    Unity Time.timeScale
    Unity 打开网页 Application.OpenURL(字符串);
    Unity www动态加载网上图片
    Unity GameObject.Find 和 transform.Find
    Unity UGUI按钮添加点击事件
    事务
    git和redis
  • 原文地址:https://www.cnblogs.com/i-shu/p/11831109.html
Copyright © 2011-2022 走看看