Python2实现的几种排序算法

以下排序算法基于Python2.7

冒泡排序: 

每次比较相邻的两个元素,比较大小并进行交换,直到排序完成。 

def bubblesort(list):
    for j in xrange(len(list)-1,-1,-1):
    #推荐使用xrange替代range
        for i in xrange(j):
            if list[i]>list[i+1]: list[i],list[i+1] = list[i+1],list[i]
    return list 

或者使用while: 

def bubbleSort(list):
    listLength = len(list)
    while listLength > 0:
        for i in range(listLength - 1):
            if list[i] > list[i+1]:
                list[i], list[i+1] = list[i+1], list[i] listLength -= 1
    return list



快速排序:  

先从数列中取出一个数作为基准数,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复上面的步骤,直到各区间只有一个数。 

def quickSort(list, low, high):
    i = low
    j = high
    if i >= j:
        return list
    key = list[i]
    while i < j:
        while i < j and list[j] >= key:
            j = j-1
            list[i] = list[j]
        while i < j and list[i] <= key:
            i = i+1
            list[j] = list[i]
            list[i] = key
    quickSort(list, low, i-1)
    quickSort(list, j+1, high)
    return list

快速排序还有种简单的写法,三行搞定: 

def quickSort(list):
    if len(list)<=1:
        return list
    return quickSort([lt for lt in list[1:] if lt<list[0]]) + list[0:1] + quickSort([ge for ge in list[1:] if ge>=list[0]])


插入排序:  

每次遍历从min_index处的值开始,依次再跟后面的值比较,当发现j处比min_index值小时,将min_index赋值为j,继续跟后面的进行比较,直到找到最小的那个j,将j与min_index交换。 

def insertSort(list):
    for i in xrange(len(list)):
        min_index = i
        for j in xrange(i+1,len(list)):
            if list[min_index] > list[j]:
                min_index = j list[i],list[min_index] = list[min_index], list[i]
    return list 


堆排序: 

堆实际上是一棵完全二叉树, 堆排序其实也是一种选择排序,是一种树形选择排序。 

def siftDown(list,start,end):
    root=start
    while True:
        child = 2*root+1
        if child > end:
            break
        if child+1<=end and list[child]<list[child+1]:
            child+=1
        if list[root]<list[child]:
            list[root],list[child]=list[child],list[root]
            root=child
        else:
            break
def heapSort(list):
    for start in xrange((len(list)-2)/2,-1,-1):
        siftDown(list,start,len(list)-1)
    for end in xrange(len(list)-1,0,-1):
        list[0],list[end]=list[end],list[0]
        siftDown(list,0,end-1)
    return list

Python中内置了一个生成堆的模块heapq可以直接调用:

import heapq
def heapSort(list): 
    heapq.heapify(list)
    heap = []
    while list:
        heap.append(heapq.heappop(list))
    return heap


打完收功!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值