常见6种排序算法的PYTHON实现

时间:2026-01-19

常用排序算法的Python实现

相关代码如下(直接拷贝就可以用了):

import random

import math

'''冒泡排序'''

'''多次比较相邻的两个元素

若第一个比第二个大则交换

持续进行比较直到没有需要交换的元素为止'''

def bubbleSort(num):

length=len(num)

while length>0:

for i in range(length-1):

if num[i]>num[i+1]:

num[i],num[i+1]=num[i+1],num[i]

length=length-1

pass

print(num)

return num

'''选择排序'''

'''每一次从待排序的数据元素中选出最小(或最大)的一个元素

存放在序列的起始位置

直到全部待排序的数据元素排完'''

def selectSort(num):

length=len(num)

for i in range(length):

tmpNum=i

for j in range(i,length):

if num[tmpNum]>num[j]:

num[tmpNum],num[j]=num[j],num[tmpNum] print(num)

return num

'''插入排序'''

'''将一个数据插入到已经排好序的有序数据中

从而得到一个新的、个数加一的有序数据'''

'''实现方法一'''

def insertSort(num):

length=len(num)

for i in range(1,length):

tmp=num[i]

for j in range(i,-1,-1):

if num[j]>tmp:

num[j+1],num[j]=num[j],num[j+1] print(num)

return num

'''实现方法二'''

def insertSort2(num):

length=len(num)

for i in range(1,length):

tmp=num[i]

tmpi=i-1

while tmpi>=0and num[tmpi]>tmp:

num[tmpi],num[tmpi+1]=num[tmpi+1],num[tmpi]

tmpi=tmpi-1

pass

print(num)

return num

'''快速排序'''

'''通过一趟排序将要排序的数据分割成独立的两部分

其中一部分的所有数据都比另外一部分的所有数据都要小

然后再按此方法对这两部分数据分别进行快速排序'''

def quickSort(num):

length=len(num)

if length<=1:

return num

tmpi=random.randint(0,length-1)

tmp=num[tmpi]

left=[]

right=[]

for i in range(0,length):

if num[i]>tmp:

right.append(num[i])

else:

left.append(num[i])

return quickSort(left)+quickSort(right)

'''归并排序'''

'''归并排序采用的分治法,

将有序的序列合成一个序列,

反之,将当前序列分成多个序列分别排序,

依此方法类推,直到序列中只有一个元素为止,

常用的归并排序为二路归并,即分成两个序列'''

def mergerSort(num):

result=[]

length=len(num)

if length<=1:

return num

left=mergerSort(num[:math.floor(length/2)])

right=mergerSort(num[math.floor(length/2):])

while len(left)>0and len(right)>0:

if left[0]<=right[0]:

result.append(left.pop(0))

else:

result.append(right.pop(0))

if len(left)>0:

result.extend(left)

else:

result.extend(right)

return result

'''堆排序'''

'''堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,

它是选择排序的一种。

主要的过程分为建立堆、堆调整和堆排序。

建立堆:建堆是不断调整堆的过程,从len/2处开始调整,一直到第一个节点,

此处len是堆中元素的个数。'''

def createHeap(num):

length=len(num)

flag=1

for i in range(math.floor(length/2)-1,-1,-1):

if num[2*i+2]>num[i]and num[2*i+2]>num[2*i+1]:

num[2*i+2],num[i]=num[i],num[2*i+2]

num=handHeap(num,2*i+2)

else:

if num[2*i+1]>num[i]and num[2*i+1]>num[2*i+2]:

num[2*i+1],num[i]=num[i],num[2*i+1]

num=handHeap(num,2*i+1)

else:

num[i]=num[i]

return num

'''调整堆:利用的思想是比较节点i和它的孩子节点left(i),right(i),

选出三者最大(或者最小)者,如果最大(小)值不是节点i而是它的一个孩子节点,那边交互节点i和该节点,然后再调用调整堆过程,

这是一个递归的过程。'''

def handHeap(num,head):

temp=2*head+1

tempHead=head

length=len(num)

while temp<length:

if num[tempHead]<num[temp]:

num[tempHead],num[temp]=num[temp],num[tempHead]

if temp+1<length and num[tempHead]<num[temp+1]:

num[tempHead],num[temp+1]=num[temp+1],num[tempHead] tempHead=temp

temp=tempHead*2+1

return num

'''堆排序:堆排序是利用上面的两个过程来进行的。首先是根据元素构建堆。然后将堆的根节点取出(一般是与最后一个节点进行交换),

将前面len-1个节点继续进行堆调整的过程,

然后再将根节点取出,这样一直到所有节点都取出。'''

def headSort(num):

length=len(num)

if length<=1:

return num

tempLength=length-1

num=createHeap(num)

while tempLength>0:

num[tempLength],num[0]=num[0],num[tempLength]

num[:tempLength]=handHeap(num[:tempLength],0)

tempLength=tempLength-1

return num

'''堆排序结束'''

if__name__=='__main__':

testlist=[34,31,35,21,43,53,37,94,54,26,51]

print(headSort(testlist))

…… 此处隐藏:1045字,全部文档内容请下载后查看。喜欢就下载吧 ……
常见6种排序算法的PYTHON实现.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219