首页 / 算法 / 各种排序算法的Python实现。
各种排序算法的Python实现。
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了各种排序算法的Python实现。,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4512字,纯文字阅读大概需要7分钟。
内容图文
![各种排序算法的Python实现。](/upload/InfoBanner/zyjiaocheng/1124/a2e919d2adf24783b9db5b4443061b69.jpg)
大学的算法导论课确实是混过去的,到了毕业的时候结果连个冒泡排序都不能裸写出来,只记得一些算法的基本理论,如分治法、递归、动态规划、回溯、图论、时间空间理论这些。大概知道这些排序算法的实现原理,真在纸上写出来脑子又是一团浆糊。最近在网上看到九章算法的网络课程费用是1299,团购价是799,真是狠不下心去买,也后悔大学里没好好学点算法,浪费了那些学费。
-
def the_min_of_lists ( lists ):
-
min = lists [ 0 ]
-
for i in range ( 1 , len ( lists )):
-
if min > lists [ i ]:
-
min , lists [ i ] = lists [ i ], min
-
return min
- 冒泡排序(bubble_sort)
-
def bubble_sort ( lists ):
-
count = len ( lists )
-
for i in range ( 0 , count ):
-
for j in range ( i + 1 , count ):
-
if lists [ i ] > lists [ j ]:
-
lists [ i ], lists [ j ] = lists [ j ], lists [ i ]
-
return lists
- 插入排序(insert_sort)
-
def insert_sort ( lists ):
-
for i in range ( 1 , len ( lists )):
-
key = lists [ i ]
-
j = i - 1
-
while j >= 0 :
-
if key < lists [ j ]:
-
# key = lists[j] #这样写会改变key的值,在插入排序的过程中,key值保持不变
-
# lists[j+1] = lists[j]
-
lists [ j + 1 ] = lists [ j ]
-
lists [ j ] = key
-
j -= 1
-
return lists
- 快速排序(quick_sort)
-
def quick_sort ( lists , left , right ):
-
if left > right :
-
return lists
-
low , high = left , right
-
key = lists [ left ] #key即是标准数
-
while left < right :
-
while left < right and lists [ right ] >= key :
-
right -= 1
-
lists [ left ] = lists [ right ]
-
while left < right and lists [ left ] <= key :
-
left += 1
-
lists [ right ] = lists [ left ]
-
lists [ right ] = key
-
quick_sort ( lists , low , left - 1 )
-
quick_sort ( lists , right + 1 , high )
-
return lists
- 选择排序(select_sort)
-
def select_sort ( lists ):
-
count = len ( lists )
-
for i in range ( 0 , count ):
-
min = i
-
for j in range ( i + 1 , count ):
-
if lists [ min ] > lists [ j ]:
-
min = j
-
lists [ min ], lists [ i ] = lists [ i ], lists [ min ]
-
return lists
- 归并排序(merge_sort)(此命名应包含递归和合并的意思)
-
#归并排序用两个已拍好的序列比较排序,采用递归的方式实现
-
def merge_sort ( lists ):
-
if len ( lists ) < 2 :
-
return lists
-
num = len ( lists )/ 2
-
left = merge_sort ( lists [: num ])
-
right = merge_sort ( lists [ num :])
-
return merge ( left , right )
-
-
def merge ( left , right ):
-
i , j = 0 , 0
-
result =[]
-
while i < len ( left ) and j < len ( right ):
-
if left [ i ] < right [ j ]:
-
result . append ( left [ i ])
-
i += 1
-
else :
-
result . append ( right [ j ])
-
j += 1
-
result += left [ i :] #若比较结束,将尚未比较完的那组加到result的后面
-
result += right [ j :]
-
return result
- 希尔排序(shell_sort)
-
def shell_sort ( lists ):
-
gap = 2
-
group = len ( lists )/ gap
-
while group > 1 :
-
for i in range ( 0 , group ):
-
j = i + group
-
while j < len ( lists ):
-
k = j - group
-
key = lists [ j ]
-
while k >= 0 :
-
if key < lists [ k ]:
-
lists [ k + group ] = lists [ k ]
-
lists [ k ] = key
-
k -= group
-
j += group
-
group /= gap
-
return lists
- 堆排序(heap_sort)
-
#堆排序分为最大堆和最小堆,是完全二叉树。
-
def build_heap ( lists , size ):
-
for i in range ( 0 ,( size / 2 ))[::- 1 ]:
-
adjust_heap ( lists , i , size )
-
-
def adjust_heap ( list , i , size ):
-
lchild = 2 * i + 1
-
rchild = 2 * i + 2
-
max = i
-
if i < size / 2 :
-
if lchild < size and list [ lchild ] > list [ max ]:
-
max = lchild
-
if rchild < size and list [ rchild ] > list [ max ]:
-
max = rchild
-
if max != i :
-
list [ max ], list [ i ] = list [ i ], list [ max ]
-
adjust_heap ( list , max , size )
-
-
def heap_sort ( lists ):
-
size = len ( lists )
-
build_heap ( lists , size )
-
for i in range ( 0 , size )[::- 1 ]:
-
lists [ 0 ], lists [ i ] = lists [ i ], lists [ 0 ]
-
adjust_heap ( lists , 0 , i )
- 基数排序(radix_sort)
原文:http://www.cnblogs.com/fengmanlou/p/4841858.html
内容总结
以上是互联网集市为您收集整理的各种排序算法的Python实现。全部内容,希望文章能够帮你解决各种排序算法的Python实现。所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。