Python實現(xiàn)桶排序與快速排序算法結(jié)合應(yīng)用示例
本文實例講述了Python實現(xiàn)桶排序與快速排序算法結(jié)合應(yīng)用的方法。分享給大家供大家參考,具體如下:
#-*- coding: UTF-8 -*-
import numpy as np
from QuickSort import QuickSort
def BucketSort(a, n):
barrel = {}
for i in xrange(0,n):
barrel.setdefault(i, [])
min = np.min(a)
max = np.max(a)
for x in a:
for i in xrange(0,n-1):
if x >= min +i* (max - min)/n and x < min +(i +1) * (max - min)/n:
barrel[i].append(x)
elif i == n-2 and x >= min +(i +1) * (max - min)/n:
barrel[i+1].append(x)
k = 0
for i in xrange(0,n):
if len(barrel[i]) != 0:
arr = np.array(barrel[i])
QuickSort(arr, 0, len(barrel[i]) -1)
for x in arr:
a[k] = x
k += 1
if __name__ == '__main__':
a = np.random.randint(0, 100, size = 10)
print "Before sorting..."
print "---------------------------------------------------------------"
print a
print "---------------------------------------------------------------"
BucketSort(a, 10)
print "After sorting..."
print "---------------------------------------------------------------"
print a
print "---------------------------------------------------------------"
快速排序QuickSort:
#-*- coding: UTF-8 -*-
import numpy as np
def Partition(a, i, j):
x = a[i] #將數(shù)組的第一個元素作為初始基準位置
p = i #同時記錄下該元素的位置
while i < j:
while i < j and a[j] >= x:
j -= 1
while i < j and a[i] <= x:
i += 1
if i != j:
a[i], a[j] = a[j], a[i] #交換a[i]與a[j]
a[p], a[i] = a[i], a[p] #將a[p]與a[i]進行交換
p = i #得到分隔位置
return p
def QuickSort(a, i, j):
if i < j:
p = Partition(a, i, j)
QuickSort(a, i, p-1)
QuickSort (a, p+1, j)
if __name__ == '__main__':
a = np.random.randint(0, 100, size = 100)
print "Before sorting..."
print "---------------------------------------------------------------"
print a
print "---------------------------------------------------------------"
QuickSort(a, 0, a.size - 1)
print "After sorting..."
print "---------------------------------------------------------------"
print a
print "---------------------------------------------------------------"
程序運行結(jié)果:

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
講解Python的Scrapy爬蟲框架使用代理進行采集的方法
這篇文章主要介紹了講解Python的Scrapy爬蟲框架使用代理進行采集的方法,并介紹了隨機使用預(yù)先設(shè)好的user-agent來進行爬取的用法,需要的朋友可以參考下2016-02-02
Python調(diào)用graphviz繪制結(jié)構(gòu)化圖形網(wǎng)絡(luò)示例
今天小編就為大家分享一篇Python調(diào)用graphviz繪制結(jié)構(gòu)化圖形網(wǎng)絡(luò)示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
python面向?qū)ο缶幊淘O(shè)計原則之單一職責原則詳解
這篇文章主要為大家詳細介紹了python面向?qū)ο缶幊淘O(shè)計原則之單一職責原則,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
python學習筆記之調(diào)用eval函數(shù)出現(xiàn)invalid syntax錯誤問題
python是一門多種用途的編程語言,時常扮演腳本語言的角色。一般來說,python可以定義為面向?qū)ο蟮哪_本語言,這個定義把面向?qū)ο蟮闹С趾兔嫦蚰_本語言的角色融合在一起。很多時候,人們常常喜歡用“腳本”和不是語言來描述python的代碼文件。2015-10-10
Python函數(shù)命名空間和作用域(Local與Global)
這篇文章主要介紹了Python函數(shù)命名空間和作用域分別介紹Local與Global模式,內(nèi)容詳細,具有一定的參考價值,需要的小伙伴可以參考一下2022-03-03

