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

python實現(xiàn)的各種排序算法代碼

 更新時間:2013年03月04日 00:02:16   作者:  
python實現(xiàn)的各種排序算法,包括選擇排序、冒泡排序、插入排序、歸并排序等,學習python的朋友可以參考下

復制代碼 代碼如下:

# -*- coding: utf-8 -*-
# 測試各種排序算法
# link:m.fzitv.net
# date:2013/2/2

#選擇排序
def select_sort(sort_array):
    for i, elem in enumerate(sort_array):
        for j, elem in enumerate(sort_array[i:]):
            if sort_array[i] > sort_array[j + i]:
                #交換
                sort_array[i], sort_array[j + i] = sort_array[j + i], sort_array[i]

#冒泡排序
def bubble_sort(sort_array):
    for i, elem in enumerate(sort_array):
        for j, elem in enumerate(sort_array[:len(sort_array) - i - 1]):
            if sort_array[j] > sort_array[j + 1]:
                sort_array[j], sort_array[j + 1] = sort_array[j + 1], sort_array[j]

#插入排序
def insert_sort(sort_array):
    for i, elem in enumerate(sort_array):
        for j, elem in enumerate(sort_array[:i]):
            if sort_array[j] > sort_array[i]:
                sort_array.insert(j, sort_array[i])
                del sort_array[i + 1]
#歸并排序
def merge_sort_wrapper(sort_array):
    merge_sort(sort_array, 0, len(sort_array) - 1)

def merge_sort(sort_array, left = 0, right = 0):
    if left < right:
        center = (left + right) / 2
        merge_sort(sort_array, left, center)
        merge_sort(sort_array, center + 1, right)
        merge(sort_array, left, right, center)

def merge(sort_array, left, right, center):
    result = []
    arrayA = sort_array[left:center + 1]
    arrayB = sort_array[center + 1:right + 1]
    while((len(arrayA) > 0) and (len(arrayB) > 0)):
        if(arrayA[0] > arrayB[0]):
            result.append(arrayB.pop(0))
        else:
            result.append(arrayA.pop(0))

    if(len(arrayA) > 0):
        result.extend(arrayA)
    if(len(arrayB) > 0):
        result.extend(arrayB)  
    sort_array[left:right + 1] = result

#快排   
def quick_sort(sort_array):
    if(len(sort_array) < 2):
        return

    left = [x for x in sort_array[1:] if x < sort_array[0]]
    right = [x for x in sort_array[1:] if x >= sort_array[0]]
    quick_sort(left)
    quick_sort(right)
    sort_array[:] = left + [sort_array[0]] + right

#shell排序
def shell_sort(sort_array):
    dist=len(sort_array)/2 
    while dist > 0: 
        for i in range(dist,len(sort_array)): 
            tmp=sort_array[i] 
            j = i 
            while j >= dist and tmp < sort_array[j - dist]: 
                sort_array[j] = sort_array[j - dist] 
                j -= dist 
            sort_array[j] = tmp 
        dist /= 2 

#基數(shù)排序,均為整數(shù),不支持負數(shù)和重復
def radix_sort(sort_array):
    max_elem = max(sort_array)
    bucket_list = []
    for i in range(max_elem):
        bucket_list.insert(i, 0)

    for x in sort_array:
        bucket_list[x - 1] = -1

    sort_array[:] = [x + 1 for x in range(len(bucket_list)) if bucket_list[x] == -1]

#堆排序
def heap_sort(sort_array):
   #沒有寫出來,再想想
   pass

#測試例子
def algo_sort_test(sort_array, sort_method):
    sort_method(sort_array)

if __name__ == '__main__':

    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, select_sort)
    print sort_array

    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, bubble_sort)
    print sort_array   

    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, insert_sort)
    print sort_array     

    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, merge_sort_wrapper)
    print sort_array

    sort_array = [1, 2, 3, 5, -4, 4, 10, 300, 19, 13, 16, 18, 500, 190, 456, 23]
    algo_sort_test(sort_array, quick_sort)
    print sort_array 

    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, shell_sort)
    print sort_array      

    sort_array = [1, 2, 3, 5, 4, 10, 19, 13, 16, 18, 190, 456, 23]
    algo_sort_test(sort_array, radix_sort)
    print sort_array      

    print 'OK'

非常基礎的知識內(nèi)容,選擇、冒泡、插入、歸并、基數(shù),還有快排都能手寫出來,但寫了一遍發(fā)現(xiàn)堆排序忘了怎么做了。要復習啦。

相關文章

  • Python用list或dict字段模式讀取文件的方法

    Python用list或dict字段模式讀取文件的方法

    這篇文章主要給大家介紹了Python利用list字段模式或者dict字段模式讀取文件的方法,文中給出了詳細的介紹和示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友可以跟著小編來一起學習學習吧。
    2017-01-01
  • Pandas統(tǒng)計重復的列里面的值方法

    Pandas統(tǒng)計重復的列里面的值方法

    今天小編就為大家分享一篇Pandas統(tǒng)計重復的列里面的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 用Python實現(xiàn)一本個性化日歷

    用Python實現(xiàn)一本個性化日歷

    大家好,本篇文章主要講的是用Python實現(xiàn)一本個性化日歷,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 如何在Windows下載、安裝Python和配置環(huán)境(新手、保姆級教程)

    如何在Windows下載、安裝Python和配置環(huán)境(新手、保姆級教程)

    本文詳細介紹了如何在Windows系統(tǒng)上下載、安裝Python以及配置環(huán)境變量,通過步驟說明,即使是新手也能順利完成Python的安裝,并驗證其是否成功,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • python3 requests 各種發(fā)送方式詳解

    python3 requests 各種發(fā)送方式詳解

    這篇文章主要介紹了python3 requests 各種發(fā)送方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 初步探究Python程序的執(zhí)行原理

    初步探究Python程序的執(zhí)行原理

    這篇文章主要介紹了Python程序的執(zhí)行原理,簡要地描述了其中的步驟,需要的朋友可以參考下
    2015-04-04
  • python交互模式下輸入換行/輸入多行命令的方法

    python交互模式下輸入換行/輸入多行命令的方法

    這篇文章主要介紹了python交互模式下輸入換行/輸入多行命令的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • python計算N天之后日期的方法

    python計算N天之后日期的方法

    這篇文章主要介紹了python計算N天之后日期的方法,涉及Python操作日期的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • Pytorch:Conv2d卷積前后尺寸詳解

    Pytorch:Conv2d卷積前后尺寸詳解

    這篇文章主要介紹了Pytorch:Conv2d卷積前后尺寸,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 用Python進行柵格數(shù)據(jù)的分區(qū)統(tǒng)計和批量提取

    用Python進行柵格數(shù)據(jù)的分區(qū)統(tǒng)計和批量提取

    該教程其實源于web,我看到之后覺得很實用,于是自己又重復做了一遍,寫了詳細的注釋分享給大家,希望對大家的研究有幫助,本文講述了柵格的分區(qū)統(tǒng)計,批量提取,深化理解遍歷循環(huán)等內(nèi)容
    2021-05-05

最新評論

治县。| 福贡县| 嘉定区| 青阳县| 县级市| 德钦县| 郴州市| 阜南县| 海林市| 策勒县| 琼海市| 化州市| 闽清县| 璧山县| 泾阳县| 龙口市| 彰化市| 奉新县| 宝鸡市| 泉州市| 宁河县| 随州市| 天津市| 息烽县| 石柱| 唐河县| 彩票| 丹东市| 永安市| 黔西县| 报价| 太谷县| 辽阳市| 靖安县| 惠来县| 浪卡子县| 湖北省| 富川| 天峻县| 白河县| 乌鲁木齐县|