日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

快速排序

發布時間:2023/12/24 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 快速排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

速排序

#快速排序法
'''
    思路分析:
        1.取一個元素p,使元素p歸位。
        2.列表被p分成兩部分,左邊都比p小,右邊都比p大,
        3.遞歸完成排序。

        關鍵點:
            1.歸位
            2.遞歸

        partition函數里的邏輯:
            1.拿去左邊第一個值假如是5,做比較,現在第一個位置為空
            2.從右邊開始找比5小的數,放到那個空的位置。找到后移過去,自己的位置又位空,
            3.從左邊找,比5大的數,移過去空的位置,以此類推。
            4.最后疊加,重合。

            5 1 7

            _ 1 7

            1 _ 7

        時間的復雜度: n*logn
        最壞情況:n*    如:987654321
        預防:隨機找一個元素,就不找第一個元素,跟第一個元素對調一下。
'''

import random
import copy
import sys
import time


sys.setrecursionlimit(100000) #更改最大遞歸深度

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 partition(li,left,right): #無序列表,最小值,最大值
    tmp =li[left]   #拿去左邊第一個值
    while left < right:  #左邊小于右邊,就一直循環
        while left < right and li[right] >= tmp:
            right -= 1
        li[left] = li[right]    #把小于5的數,移到左邊空的位置
        while left < right and li[left] <= tmp:
            left += 1
        li[right] = li[left]    #把大于的5的數,移到右邊空的位置
    li[left] = tmp  #最后還需要歸位。

    return left

def _quick_sort(data,left,right):    #data=列表,左邊,右邊
    if left < right:    #至少兩個元素,才會遞歸
        mid =partition(data,left,right)
        _quick_sort(data,left,mid-1)
        _quick_sort(data,mid+1,right)

#加殼處理
@cal_time
def quick_sort(li):
    return _quick_sort(li,0,len(li)-1)

#系統排序
@cal_time
def sys_sort(li):
    li.sort()

li = list(range(100000))
random.shuffle(li)
li1 = copy.deepcopy(li)
li2 = copy.deepcopy(li)

sys_sort(li1)   #系統排序
quick_sort(li2) #快排排序

打印如下:

總結

以上是生活随笔為你收集整理的快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。