zoukankan      html  css  js  c++  java
  • 快排

    快速排序

    快排的思路:

    快速排序代码--第一步

    怎么写partition函数?

    import time
    import random
    
    def cal_time(func):            # 装饰器 ,用来检测算法所执行的时间
        def wrapper(*args,**kwargs):
            t1=time.time()
            result=func(*args,**kwargs)
            t2=time.time()
            print("%s running time: %s secs." %(func.__name__,t2-t1))
            return result
        return wrapper
    
    def quick_sort_x(data,left,rigrt):   # 因为这个为递归 , 所以不能直接进行赋值 计算
        if left < rigrt : # 目的是让中间值 的 左边右边 不相碰
            mid = partition(data,left,rigrt)
            quick_sort_x(data,left,mid - 1)
            quick_sort_x(data,mid + 1,rigrt)
    
    def partition(data,left,right):
        tmp = data[left]  # 另最左边的值为中间值 , 并且取出 使这个值得序列号空置
        while left < right: # 目的是让中间值 的 左边右边 不相碰
            while left < right and data[right]>=tmp:  # 当左边小于右边 且 右边的值 大于 中间值
                right -= 1  # 右边的值得序列号向左移动一位
            data[left] = data[right] # 如果右边的值 小于 中间值的话 ,则 将小于中间值的这个值 放置在 原本 中间值所在的序列号上
            while left < right and data[left] <=tmp: # 若左边的值 小于 中间值
                left += 1 # 左边值得序列号向右移动一位
            data[right] = data[left] # 若左边的值 大于 中间值的话 , 则将这个大于中间值得这个值 放置在 上一个 右边所空置的序列号上
        data[left] = tmp # 最后,将这个中间值 放在在最后的一个位置上
        return left
    
    @cal_time
    def quick_sort(data):
        return quick_sort_x(data,0,len(data) - 1)
    
    data = list(range(1000))
    quick_sort(data)
    print(data)

    算法所呈现的效果为:

    bubble_sort running time: 0.3220186233520508 secs.

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ···················985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999]

     快排的效率:

    快排的问题:

     

    1、问题

      在一些环境中,可能快排的速率比冒泡还慢

    2、递归

     ----------------------------------

  • 相关阅读:
    (Linux)CentOS7下安装JDK 1.8
    centos 7 防火墙操作
    centos 7 挂载U盘
    Linux(CentOs 7)系统重装笔记(二)---完全删除用户账号和root用户登录
    更改oracle数据库密码(因为密码过期)
    Linux(CentOs 7)系统重装笔记(一)
    C#中的double类型数据向SQL sqerver 存储与读取问题
    SQL Server (MSSQLSERVER) 服务由于下列服务特定错误而终止: %%17051
    django+uwsgi+nginx
    golang的array/slice
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9212120.html
Copyright © 2011-2022 走看看