八大排序算法的 Python 实现！

1、插入排序

definsert_sort(lists):

# 插入排序

count=len(lists)

foriinrange(1,count):

key=lists[i]

j=i-1

iflists[j]>key:

lists[j+1]=lists[j]

lists[j]=key

j-=1

returnlists

2、希尔排序

defshell_sort(lists):

# 希尔排序

count=len(lists)

step=2

group=count/step

whilegroup>:

foriinrange(,group):

j=i+group

whilej

k=j-group

key=lists[j]

iflists[k]>key:

lists[k+group]=lists[k]

lists[k]=key

k-=group

j+=group

group/=step

returnlists

3、冒泡排序

defbubble_sort(lists):

# 冒泡排序

count=len(lists)

foriinrange(,count):

forjinrange(i+1,count):

iflists[i]>lists[j]:

lists[i],lists[j]=lists[j],lists[i]

returnlists

4、快速排序

defquick_sort(lists, left, right):

# 快速排序

ifleft>=right:

returnlists

key=lists[left]

low=left

high=right

whileleft

whileleft=key:

right-=1

lists[left]=lists[right]

whileleft

left+=1

lists[right]=lists[left]

lists[right]=key

quick_sort(lists,low,left-1)

quick_sort(lists,left+1,high)

returnlists

5、直接选择排序

defselect_sort(lists):

# 选择排序

count=len(lists)

foriinrange(,count):

min=i

forjinrange(i+1,count):

iflists[min]>lists[j]:

min=j

lists[min],lists[i]=lists[i],lists[min]

returnlists

6、堆排序

lchild=2*i+1

rchild=2*i+2

max=i

ifi

iflchildlists[max]:

max=lchild

ifrchildlists[max]:

max=rchild

ifmax!=i:

lists[max],lists[i]=lists[i],lists[max]

defbuild_heap(lists,size):

foriinrange(,(size/2))[::-1]:

defheap_sort(lists):

size=len(lists)

build_heap(lists,size)

foriinrange(,size)[::-1]:

lists[],lists[i]=lists[i],lists[]

7、归并排序

defmerge(left, right):

i,j=,

result=[]

whilei

ifleft[i]

result.append(left[i])

i+=1

else:

result.append(right[j])

j+=1

result+=left[i:]

result+=right[j:]

returnresult

defmerge_sort(lists):

# 归并排序

iflen(lists)

returnlists

num=len(lists)/2

left=merge_sort(lists[:num])

right=merge_sort(lists[num:])

returnmerge(left,right)

8、基数排序

importmath

foriinrange(1,k+1):

forjinlists:

dellists[:]

forzinbucket:

lists+=z

delz[:]

returnlists

0 条评论

• 我们来继续研究 mybatis 框架sql映射文件的属性

‍我们来继续研究 mybatis 框架sql映射文件的属性 各位小伙伴 祝大家元旦快乐 开始我们今天的分享 我们已经了解了 mybatis 框架的两种使用方式以...

• 改善Python程序的一些建议

第一章：引论 建议1、理解Pythonic概念----详见Python中的《Python之禅》 建议2、编写Pythonic代码 （1）避免不规范代码，比如只用...

• UMCP提出对损失函数进行可视化，以提高神经网络的训练能力

原文来源：arxiv 作者：Hao Li、Zheng Xu、Gavin Taylor、Tom Goldstein 「雷克世界」编译：嗯~阿童木呀、KABUDA ...

• Python学习（三） 八大排序算法的实现（上）

本文Python实现了直接插入排序、基数排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、希尔排序。    上篇来介绍前四种排序方式：  ...

• Python学习（三） 八大排序算法的实现（下）

本文Python实现了插入排序、基数排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序的后面四种。 上篇：Python学习（三） 八大排序算...

• python 实现在无序数组中找到中位数方法

1、求一个无序数组的中位数， （若数组是偶数，则中位数是指中间两个数字之和除以2，若数组是奇数，则中位数是指最中间位置。要求：不能使用排序，时间复杂度尽量低

• mybatis_基础篇

一、认识mybatis： 　　　　MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software founda...

• Mybaits深入了解（一）----带你入门

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google ...

• MIT 6.S094· 深度学习 | 学霸的课程笔记，我们都替你整理好了

深度学习：为多项人工智能技术服务的成套技术，近年来伴随着研究的不断深入和GPU能力的不断拓展，它也变得更加强大，SDC就是能够利用这些技术的系统。