最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例

 更新時(shí)間:2023年07月29日 10:14:46   作者:次時(shí)代小羊  
這篇文章主要介紹了使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例,所謂排序,就是使一串記錄,按照其中的某個(gè)或某些關(guān)鍵字的大小,遞增或遞減的排列起來(lái)的操作,需要的朋友可以參考下

Python實(shí)現(xiàn)七種常見(jiàn)的排序算法

import random, time
# 生成隨機(jī)數(shù)組
def generate_random_array(size, lrange, rrange):
    return [random.randint(lrange, rrange) for i in range(size)]
# 判斷數(shù)組是否順序有序
def is_order_asc(arr):
    for i in range(len(arr) - 1):
        if arr[i] > arr[i + 1]:
            return False
    return True
# 排序算法裝飾器
def sort(name):
    def decoration(sort_func):
        def wrapper(*dargs, **dkw):
            start_time = time.time()
            sort_func(*dargs, **dkw)
            if is_order_asc(*dargs):
                print(name + ':數(shù)組排序所需時(shí)間為:' + str((time.time() - start_time) * 1000) + '毫秒')
            else:
                print(name + ':數(shù)組排序失敗')
        return wrapper
    return decoration
@sort('冒泡排序')
def bubble_sort(arr):
    length = len(arr)
    for i in range(length - 1):
        for j in range(length - 1):
            if arr[j + 1] < arr[j]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
@sort('選擇排序')
def select_sort(arr):
    for i in range(len(arr) - 1):
        min = i
        for j in range(i + 1,len(arr)):
            if arr[j] < arr[min]:
                min = j
        arr[min], arr[i] = arr[i], arr[min]
@sort('插入排序')
def insert_sort(arr):
    for i in range(1, len(arr)):
        insert_value = arr[i]
        for j in range(i, -1, -1):
            if arr[j - 1] <= insert_value:
                break
            arr[j] = arr[j - 1]
        arr[j] = insert_value
@sort('希爾排序')
def shell_sort(arr):
    h = 1
    while h * 3 + 1 < len(arr):
        h = h * 3 + 1
    while h > 0:
        for i in range(h, len(arr)):
            insert_value = arr[i]
            for j in range(i, -1, -h):
                if (arr[j - h] <= insert_value):
                    break
                arr[j] = arr[j - h]
            arr[j] = insert_value
        h = int((h - 1) / 3)
@sort('統(tǒng)計(jì)排序')
def count_sort(arr):
    min_value = arr[0]
    max_value = arr[0]
    for i in range(1, len(arr)):
        if arr[i] > max_value:
            max_value = arr[i]
        elif arr[i] < min_value:
            min_value = arr[i]
        else:
            pass
    count = [0 for i in range(max_value - min_value + 1)]
    for i in arr:
        count[i - min_value] += 1
    index = 0
    for i in range(len(count)):
        for j in range(count[i]):
            arr[index] = i + min_value
            index += 1
@sort('快速排序')
def quick_sort(arr):
    quick(arr, 0, len(arr) - 1)
def quick(arr, start, end):
    if start >= end:
        return
    pivot_index = partition(arr, start, end)
    quick(arr, start, pivot_index - 1)
    quick(arr, pivot_index + 1, end)
def partition(arr, start, end):
    pivot = arr[start]
    mark = start
    for i in range(start + 1, end + 1):
        if arr[i] <= pivot:
            mark += 1
            arr[i], arr[mark] = arr[mark], arr[i]
    arr[start], arr[mark] = arr[mark], arr[start]
    return mark
@sort('歸并排序')
def merge_sort(arr):
    merge_sort2(arr, 0, len(arr) - 1)
def merge_sort2(arr, start, end):
    if start >= end:
        return
    middle = int((end - start) / 2) + start
    merge_sort2(arr, start, middle)
    merge_sort2(arr, middle + 1, end)
    merge(arr, start, middle, end)
def merge(arr, start, middle, end):
    copy = [arr[i] for i in range(start, end + 1)]
    left = start
    right = middle + 1
    index = start
    while left <= middle and right <= end:
        if copy[left - start] <= copy[right - start]:
            arr[index] = copy[left - start]
            left+=1
        else:
            arr[index] = copy[right - start]
            right+=1
        index+=1
    while left <= middle:
        arr[index] = copy[left - start]
        left+=1
        index+=1
    while right <= end:
        arr[index] = copy[right - start]
        right+=1
        index+=1
if __name__ == '__main__':
    bubble_sort(generate_random_array(10000, 0, 1000000))
    select_sort(generate_random_array(10000, 0, 1000000))
    insert_sort(generate_random_array(10000, 0, 1000000))
    shell_sort(generate_random_array(10000, 0, 1000000))
    count_sort(generate_random_array(10000, 50, 100))
    quick_sort(generate_random_array(10000, 0, 1000000))
    merge_sort(generate_random_array(10000, 0, 1000000))

最后附上一份 JavaPython 執(zhí)行同樣的排序邏輯的消耗時(shí)間對(duì)比。

  • 數(shù)據(jù)規(guī)模為 10000
  • 時(shí)間單位為毫秒
算法javaPython
冒泡排序17913996
選擇排序463955
插入排序154074
希爾排序363
統(tǒng)計(jì)排序12
快速排序323
歸并排序352

到此這篇關(guān)于使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例的文章就介紹到這了,更多相關(guān)Python七大排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬蟲 urllib模塊反爬蟲機(jī)制UA詳解

    python爬蟲 urllib模塊反爬蟲機(jī)制UA詳解

    這篇文章主要介紹了python爬蟲 urllib模塊反爬蟲機(jī)制UA詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python使用pandas庫(kù)導(dǎo)入并保存excel、csv格式文件數(shù)據(jù)

    python使用pandas庫(kù)導(dǎo)入并保存excel、csv格式文件數(shù)據(jù)

    CSV格式文件很方便各種工具之間傳遞數(shù)據(jù),平時(shí)工作過(guò)程之中會(huì)將數(shù)據(jù)保存為CSV格式,這篇文章主要介紹了python使用pandas庫(kù)導(dǎo)入并保存excel、csv格式文件數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2017-12-12
  • Python中XlsxWriter模塊簡(jiǎn)介與用法分析

    Python中XlsxWriter模塊簡(jiǎn)介與用法分析

    這篇文章主要介紹了Python中XlsxWriter模塊用法,簡(jiǎn)單描述了XlsxWriter模塊的功能并結(jié)合實(shí)例形式分析了Python使用XlsxWriter模塊操作xls文件的數(shù)據(jù)插入、直方圖等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • 如何用Python中Tushare包輕松完成股票篩選(詳細(xì)流程操作)

    如何用Python中Tushare包輕松完成股票篩選(詳細(xì)流程操作)

    這篇文章主要介紹了如何用Python中Tushare包輕松完成股票篩選(詳細(xì)流程操作),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python爬蟲之自動(dòng)爬取某車之家各車銷售數(shù)據(jù)

    Python爬蟲之自動(dòng)爬取某車之家各車銷售數(shù)據(jù)

    應(yīng)朋友要求,幫忙采集某車之家的一些汽車品牌的銷售數(shù)據(jù),包含購(gòu)車時(shí)間、車型、經(jīng)銷商、裸車價(jià)等一類信息. 今天我們就簡(jiǎn)單演示一下采集過(guò)程,大家可以根據(jù)自己的興趣進(jìn)行拓展.比如采集自己喜歡的品牌汽車數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析等等,需要的朋友可以參考下
    2021-06-06
  • Python 實(shí)現(xiàn)微信自動(dòng)回復(fù)的方法

    Python 實(shí)現(xiàn)微信自動(dòng)回復(fù)的方法

    這篇文章主要介紹了Python 實(shí)現(xiàn)微信自動(dòng)回復(fù)的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)將HTML轉(zhuǎn)為PDF/圖片/XML/XPS格式

    Python實(shí)現(xiàn)將HTML轉(zhuǎn)為PDF/圖片/XML/XPS格式

    網(wǎng)頁(yè)內(nèi)容是信息傳播的主要形式之一,這篇文章主要和大家介紹了如何使用Python實(shí)現(xiàn)將HTML分別轉(zhuǎn)為PDF/圖片/XML/XPS格式等,需要的可以參考下
    2024-03-03
  • python中前綴運(yùn)算符 *和 **的用法示例詳解

    python中前綴運(yùn)算符 *和 **的用法示例詳解

    這篇文章主要介紹了python中前綴運(yùn)算符 *和 **的用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-05-05
  • PyTorch函數(shù)torch.cat與torch.stac的區(qū)別小結(jié)

    PyTorch函數(shù)torch.cat與torch.stac的區(qū)別小結(jié)

    Pytorch中常用的兩個(gè)拼接函數(shù)torch.cat() 和 torch.stack(),本文主要介紹了這兩個(gè)函數(shù)的用法加區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Python實(shí)現(xiàn)自動(dòng)化測(cè)試的全指南

    Python實(shí)現(xiàn)自動(dòng)化測(cè)試的全指南

    自動(dòng)化測(cè)試是軟件測(cè)試活動(dòng)中的一個(gè)重要分支和組成部分,自動(dòng)化測(cè)試究竟該如何實(shí)現(xiàn),它是否僅僅是編寫測(cè)試腳本那么簡(jiǎn)單,還是涉及更廣泛的技術(shù)和流程,下面小編就來(lái)和大家詳細(xì)講講
    2025-05-05

最新評(píng)論

抚州市| 长顺县| 杭锦旗| 肥东县| 温泉县| 滦南县| 康平县| 呼玛县| 新民市| 广宗县| 特克斯县| 衢州市| 利辛县| 吉水县| 修武县| 临沂市| 五寨县| 汉阴县| 盐源县| 安陆市| 德化县| 克什克腾旗| 成都市| 金华市| 汽车| 日土县| 隆昌县| 长春市| 都江堰市| 曲阜市| 杨浦区| 青河县| 鹿邑县| 陇南市| 鄂尔多斯市| 衡水市| 深圳市| 古浪县| 铜鼓县| 罗平县| 都昌县|