国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

快速排序算法在處理不同容量數(shù)組時(shí)的數(shù)據(jù)可視化

這篇具有很好參考價(jià)值的文章主要介紹了快速排序算法在處理不同容量數(shù)組時(shí)的數(shù)據(jù)可視化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

回憶快速排序:
鏈接: link

#將不同數(shù)據(jù)規(guī)模數(shù)組快排時(shí)間可視化
import time
import random
import matplotlib.pyplot as plt
import numpy as np
#三值取中法取軸值
def FindPivox(nums,left,right):
     mid=(left+right)//2
     if nums[left]>nums[mid]:
         nums[left],nums[mid]=nums[mid],nums[left]
     if nums[left]>nums[right]:
         nums[left],nums[right]=nums[right],nums[left]
     if nums[mid]>nums[right]:
         nums[mid],nums[right]=nums[right],nums[mid]
     return mid

def partition(nums,left,right,pivox):
    while left<=right:
        while nums[left]<pivox:
            left+=1
        while nums[right]>pivox and right>0:
            right-=1
        nums[left],nums[right]=nums[right],nums[left]
    nums[left], nums[right] = nums[right], nums[left]
    return left

def quick_sort(nums,left=0,right=None):
    if right is None:
        right=len(nums)-1
    #1、確定恰當(dāng)?shù)妮S值
    p_index1=FindPivox(nums,left,right)
    #2、軸值和右端元素交換位置,方便雙指針法分割小值序列和大值序列
    nums[p_index1],nums[right]=nums[right],nums[p_index1]
    #3、雙指針法分割小值序列和大值序列
    p_index2=partition(nums,left,right-1,nums[right])
    #4、將軸值元素放在小值元素序列右邊,大值元素左邊,其實(shí)就是左指針元素和軸值交換
    nums[p_index2],nums[right]=nums[right],nums[p_index2]
    #5、遞歸:(增加條件當(dāng)數(shù)據(jù)規(guī)模小于時(shí)停止遞歸改用直接插入排序)
    if (p_index2-left)>1:#隱含了基準(zhǔn)情形,當(dāng)序列中元素為1時(shí)排序完成
        quick_sort(nums,left,p_index2-1)
    if (right-p_index2)>1:
        quick_sort(nums,p_index2+1,right)
        return nums

#數(shù)據(jù)可視化

# 生成的規(guī)模為volume的整數(shù)數(shù)組
def generateData(volume,repetitionRate):
    # :param volume:定義生成的數(shù)據(jù)規(guī)模大小,應(yīng)為整數(shù)
    # :param repetitionRate: 需要生成的數(shù)據(jù)序列的重復(fù)率,其值為[0,1]的小數(shù),0代表完全不重復(fù),1代表全部重復(fù)
    # :return: 按照要求生成的規(guī)模為volume的整數(shù)數(shù)組
    dataSet = volume - int(repetitionRate*volume)
    if dataSet == 0:
        return [0]*volume
    data = [0]*volume
    for i in range(dataSet):
        data[i] = i
    startIndex = dataSet
    while startIndex < volume:
        for i in range(dataSet):
            data[startIndex] = random.randrange(0,dataSet)
            startIndex += 1
            if startIndex == volume:
                 break
    random.shuffle(data) # 將數(shù)據(jù)隨機(jī)打亂
    return data

#運(yùn)行時(shí)間
def elapsedTime(function, volumes):
    # :param function:需要計(jì)算運(yùn)行函數(shù)的函數(shù)名
    # :param volumes: 記錄數(shù)據(jù)規(guī)模大小的數(shù)組
    # :return: 記錄運(yùn)行時(shí)間的數(shù)組
    elapsedTimes = []
    for volume in volumes:
        nums = generateData(volume, 0)
        startTime = time.time_ns()
        function(nums,0,len(nums)-1)
        endTime = time.time_ns()
        elapsedTimes.append(endTime-startTime)
    return elapsedTimes

#可視化,橫軸豎軸分別代表,數(shù)據(jù)規(guī)模、運(yùn)行時(shí)間
def getChart(X,Y):
    fig, ax = plt.subplots()#創(chuàng)建一個(gè)新的圖形窗口和一個(gè)坐標(biāo)軸對(duì)象
    ax.plot(X, Y)
    plt.xlabel('Volume')  #指定x軸名稱
    plt.ylabel('Elapsed Time')  #指定y軸名稱
    plt.yticks(np.arange(0,0.5,0.1))#設(shè)置y軸間距
    plt.title('Quick Sort Elapsed Time')  #創(chuàng)建圖表名稱
    plt.show()
    plt.pause(5)
def main():
    volumes = [10*i for i in range(1,3)]#類型:列表。
    Y = elapsedTime(quick_sort,volumes)
    getChart(volumes, Y)#x:數(shù)據(jù)規(guī)模 y:快速排序所需時(shí)間

if __name__ == "__main__":
    main()

輸出結(jié)果:
快速排序算法在處理不同容量數(shù)組時(shí)的數(shù)據(jù)可視化,排序算法,信息可視化,算法,數(shù)據(jù)結(jié)構(gòu)
要想得到處理大規(guī)模數(shù)組所需的時(shí)間,可以修改
volumes參數(shù)
eg

volumes = [100*i for i in range(1,101)]

這樣就能得到快排在處理數(shù)據(jù)規(guī)模從100、200…10000的數(shù)組所需的時(shí)間啦文章來源地址http://www.zghlxwxcb.cn/news/detail-846733.html

到了這里,關(guān)于快速排序算法在處理不同容量數(shù)組時(shí)的數(shù)據(jù)可視化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法】十大經(jīng)典排序算法-快速排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】十大經(jīng)典排序算法-快速排序

    ?? 個(gè)人博客: www.hellocode.top ?? Java知識(shí)導(dǎo)航: Java-Navigate ?? CSDN: HelloCode. ?? 知乎 :HelloCode ?? 掘金 :HelloCode ?如有問題,歡迎指正,一起學(xué)習(xí)~~ 快速排序(Quick Sort)是一種高效的排序算法,是對(duì)冒泡排序的優(yōu)化。它采用分治法(Divide and Conquer)的思想,將待排序序列

    2024年02月13日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)——排序算法之快速排序

    數(shù)據(jù)結(jié)構(gòu)——排序算法之快速排序

    ? ??個(gè)人主頁: 日刷百題 系列專欄 : 〖C/C++小游戲〗 〖Linux〗 〖數(shù)據(jù)結(jié)構(gòu)〗 ? 〖C語言〗 ?? 歡迎各位 → 點(diǎn)贊 ??+ 收藏 ??+ 留言 ??? ? ? 快速排序是Hoare于1962年提出的一種二叉樹結(jié)構(gòu)的交換排序方法。 基本思想: 任取待排序元素序列中 的某元素作為基準(zhǔn)值,按照

    2024年01月21日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】:選擇排序與快速排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】:選擇排序與快速排序

    ?? 個(gè)人主頁 : Quitecoder ?? 專欄 :數(shù)據(jù)結(jié)構(gòu)與算法 我的博客即將同步至騰訊云開發(fā)者社區(qū),邀請(qǐng)大家一同入駐:騰訊云 歡迎來到排序的第二個(gè)部分:選擇排序與快速排序! 選擇排序是一種簡(jiǎn)單直觀的比較排序算法。該算法的基本思想是在每一輪中選出當(dāng)前未排序部分的最

    2024年03月17日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】排序算法(二)—>冒泡排序、快速排序、歸并排序、計(jì)數(shù)排序

    【數(shù)據(jù)結(jié)構(gòu)】排序算法(二)—>冒泡排序、快速排序、歸并排序、計(jì)數(shù)排序

    ?? 樊梓慕: 個(gè)人主頁 ??? 個(gè)人專欄: 《C語言》《數(shù)據(jù)結(jié)構(gòu)》《藍(lán)橋杯試題》《LeetCode刷題筆記》《實(shí)訓(xùn)項(xiàng)目》 ?? 每一個(gè)不曾起舞的日子,都是對(duì)生命的辜負(fù) 目錄 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占坑版 2.3前后指針版 2.4三數(shù)取中對(duì)快速排序的優(yōu)化 2.5非遞歸版 3.歸

    2024年02月08日
    瀏覽(34)
  • 數(shù)據(jù)結(jié)構(gòu)與算法:快速排序

    數(shù)據(jù)結(jié)構(gòu)與算法:快速排序

    荷蘭國旗問題 想要理解快速排序,就先理解這個(gè)問題: [LeetCode75.顏色分類] 荷蘭國旗是由紅白藍(lán)三色組成的: 現(xiàn)在將其顏色打亂 然后根據(jù)一定的算法,將其復(fù)原為紅白藍(lán)三色,這就叫做荷蘭國旗問題。 在LeetCode的題目中,其將荷蘭國旗的三個(gè)顏色用0,1,2來表達(dá),也就是說

    2024年01月15日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】:非遞歸實(shí)現(xiàn)快速排序、歸并排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】:非遞歸實(shí)現(xiàn)快速排序、歸并排序

    ?? 個(gè)人主頁 : Quitecoder ?? 專欄 :數(shù)據(jù)結(jié)構(gòu)與算法 上篇文章我們?cè)敿?xì)講解了遞歸版本的快速排序,本篇我們來探究非遞歸實(shí)現(xiàn)快速排序和歸并排序 快速排序的非遞歸實(shí)現(xiàn)主要依賴于棧(stack)來模擬遞歸過程中的函數(shù)調(diào)用棧。遞歸版本的快速排序通過遞歸調(diào)用自身來處理子

    2024年03月24日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之快速排序

    快速排序 (Quick Sort),又稱劃分交換排序(partition-exchange sort),通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)

    2024年02月10日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】如何對(duì)快速排序進(jìn)行細(xì)節(jié)優(yōu)化以及實(shí)現(xiàn)非遞歸版本的快速排序?

    【數(shù)據(jù)結(jié)構(gòu)與算法】如何對(duì)快速排序進(jìn)行細(xì)節(jié)優(yōu)化以及實(shí)現(xiàn)非遞歸版本的快速排序?

    君兮_的個(gè)人主頁 即使走的再遠(yuǎn),也勿忘啟程時(shí)的初心 C/C++ 游戲開發(fā) Hello,米娜桑們,這里是君兮_,國慶長(zhǎng)假結(jié)束了,無論是工作還是學(xué)習(xí)都該回到正軌上來了,從今天開始恢復(fù)正常的更新頻率,今天為大家?guī)淼膬?nèi)容是快速排序的兩大優(yōu)化和非遞歸實(shí)現(xiàn) 好了廢話不多說,開

    2024年02月08日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)】詳解七大排序算法(直接插入排序、希爾排序、直接選擇排序、堆排序、冒泡排序、快速排序)

    【數(shù)據(jù)結(jié)構(gòu)】詳解七大排序算法(直接插入排序、希爾排序、直接選擇排序、堆排序、冒泡排序、快速排序)

    1、基本思想 ???把待排序的數(shù)按其關(guān)鍵碼值的大小逐個(gè)插入到一個(gè)已經(jīng)排好序的有序序列中,直到所以的記錄插入完為止,得到一個(gè)新的有序序列。 ???實(shí)際中我們玩撲克牌時(shí),就用到了插入排序的思想 基本步驟: ???當(dāng)插入第i個(gè)元素時(shí),前面的arr[0]、arr[2]…arr

    2024年02月04日
    瀏覽(110)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】快速排序的三種實(shí)現(xiàn)方法

    【數(shù)據(jù)結(jié)構(gòu)與算法】快速排序的三種實(shí)現(xiàn)方法

    ? 目錄 一.基本思想 二.Hoare法 動(dòng)態(tài)演示 三.挖坑法 動(dòng)態(tài)演示 四.前后指針法 動(dòng)態(tài)演示 五.快速排序優(yōu)化 隨機(jī)下標(biāo)交換法 三路取中法 六.快速排序的特性 任取待排序元素序列中的某元素作為 基準(zhǔn)值 ,按照該排序碼將待排序集合 分割成兩子序列 , 左子序列中所有元素均小于基

    2023年04月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包