黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python實(shí)現(xiàn)的幾個常用排序算法實(shí)例

系統(tǒng) 1986 0

前段時(shí)間為準(zhǔn)備百度面試惡補(bǔ)的東西,雖然最后還是被刷了,還是把那幾天的“戰(zhàn)利品”放點(diǎn)上來,算法一直是自己比較薄弱的地方,以后還要更加努力啊。

下面用Python實(shí)現(xiàn)了幾個常用的排序,如快速排序,選擇排序,以及二路并歸排序等等。

復(fù)制代碼 代碼如下:

#encoding=utf-8
import random
from copy import copy

def directInsertSort(seq):
?""" 直接插入排序 """
?size = len(seq)
?for i in range(1,size):
??tmp, j = seq[i], i
??while j > 0 and tmp < seq[j-1]:
???seq[j], j = seq[j-1], j-1
??seq[j] = tmp
?return seq

def directSelectSort(seq):
?""" 直接選擇排序 """
?size = len(seq)
?for i in range(0,size - 1):
??k = i;j = i+1
??while j < size:
???if seq[j] < seq[k]:
????k = j
???j += 1
??seq[i],seq[k] = seq[k],seq[i]
?return seq

def bubbleSort(seq):
?"""冒泡排序"""
?size = len(seq)
?for i in range(1,size):
??for j in range(0,size-i):
???if seq[j+1] < seq[j]:
????seq[j+1],seq[j] = seq[j],seq[j+1]
?return seq

def _divide(seq, low, high):
?"""快速排序劃分函數(shù)"""
?tmp = seq[low]
?while low != high:
??while low < high and seq[high] >= tmp: high -= 1
??if low < high:
???seq[low] = seq[high]
???low += 1
??while low < high and seq[low] <= tmp: low += 1
??if low < high:
???seq[high] = seq[low]
???high -= 1
?seq[low] = tmp
?return low

def _quickSort(seq, low, high):
?"""快速排序輔助函數(shù)"""
?if low >= high: return
?mid = _divide(seq, low, high)
?_quickSort(seq, low, mid - 1)
?_quickSort(seq, mid + 1, high)

def quickSort(seq):
?"""快速排序包裹函數(shù)"""
?size = len(seq)
?_quickSort(seq, 0, size - 1)
?return seq

def merge(seq, left, mid, right):
?tmp = []
?i, j = left, mid
?while i < mid and j <= right:
??if seq[i] < seq[j]:
???tmp.append(seq[i])
???i += 1
??else:
???tmp.append(seq[j])
???j += 1
?if i < mid: tmp.extend(seq[i:])
?if j <= right: tmp.extend(seq[j:])

?seq[left:right+1] = tmp[0:right-left+1]

def _mergeSort(seq, left, right):
?if left == right:
??return
?else:
??mid = (left + right) / 2
??_mergeSort(seq, left, mid)
??_mergeSort(seq, mid + 1, right)
??merge(seq, left, mid+1, right)

#二路并歸排序
def mergeSort(seq):
?size = len(seq)
?_mergeSort(seq, 0, size - 1)
?return seq

if __name__ == '__main__':
?s = [random.randint(0,100) for i in range(0,20)]
?print s
?print "\n"
?print directSelectSort(copy(s))
?print directInsertSort(copy(s))
?print bubbleSort(copy(s))
?print quickSort(copy(s))
?print mergeSort(copy(s))


運(yùn)行結(jié)果如下:
復(fù)制代碼 代碼如下:

E:\python_project\practice>sorting.py
[10, 47, 56, 76, 64, 84, 26, 8, 47, 51, 88, 81, 32, 95, 91, 29, 28, 69, 61, 45]


[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論