zoukankan      html  css  js  c++  java
  • 快速排序算法

    快速排序算法

    快排思路:

      取一个元素p(第一个元素),使元素p归位;

      列表被p分成两部分,左边都比p小,右边都比p大;

      递归完成排序。

    时间复杂度为:

      O(nlogn)

    import random
    import time
    
    def cal_time(func):
        """
        测试时间装饰器
        :param func: 接收一个函数
        :return:
        """
        def wrapper(*args, **kwargs):
            ti = time.time()
            x = func(*args, **kwargs)
            ti2 = time.time()
            print("time cost:", func.__name__, ti2 - ti)
            return x
        return wrapper
    
    
    def quick_sort_x(data, left, right):
        if left < right:
            # 将left位置的数字,归位
            mid = partition(data, left, right)
            # 递归操作
            quick_sort_x(data, left, mid - 1)
            quick_sort_x(data, mid + 1, right)
    
    
    def partition(data, left, right):
        """
        实现归位操作
        :param data: 无序列表
        :param left: 列表左边下标
        :param right: len(data) - 1
        :return:排序后的列表
        """
        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 right
    
    
    @cal_time
    def quick_sort(data):
        return quick_sort_x(data, 0, len(data) - 1)
    
    da = list(range(10000))
    random.shuffle(da)
    quick_sort(da)
    print(da)
  • 相关阅读:
    进程和程序
    linux socket基本知识
    window核心编程 第五章 作业
    树的基本操作(C语言)
    每天都在反省自己,但是每天却都浑浑噩噩
    Windows核心编程 内核对象
    还没完整看过一本技术的书籍啊
    管道
    Memory Layout of a C Program(7.6)
    cpio命令用法
  • 原文地址:https://www.cnblogs.com/yxy-linux/p/6520351.html
Copyright © 2011-2022 走看看