python中的各种排序

#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):
    """快速排序划分函数"""
    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):
    """快速排序辅助函数"""
    if low >= high: return
    mid = _divide(seq, low, high)
    _quickSort(seq, low, mid - 1)
    _quickSort(seq, mid + 1, high)

def quickSort(seq):
    """快速排序包裹函数"""
    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))

  

python中的各种排序

时间: 2024-11-06 09:44:36

python中的各种排序的相关文章

Python中的字典排序

Python中比较常用的排序有两个函数, 一.定义 (1)一个是List数据结构中的sort >>> help(list.sort)Help on method_descriptor: sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; cmp(x, y) -> -1, 0, 1 The sort() method takes optional arguments for co

漫谈python中的搜索/排序

在数据结构那一块,搜索有顺序查找/二分查找/hash查找,而排序有冒泡排序/选择排序/插入排序/归并排序/快速排序.如果遇到数据量和数组排列方式不同,基于时间复杂度的考虑,可能需要用到混合算法.如果用C语言自己写,是一个很头疼且门槛很高的过程,python却用很简单的方式,让这类算法人人可用. 排序的话,python采用了一个sort函数,这个函数用的是一个适应性强的.稳定的.自然的归并算法,名为timsort.而查找,用字典,时间复杂度可以降低到O(1),而字典的实现方式,则是利用了hash函

今天来谈谈Python中的各种排序总结,含实现代码

下图是各种排序方法的时间复杂度.空间复杂度和稳定性,大牛编程吧教你如何编程提升. 1.直接插入排序. 直接插入的基本思想是每一步将一个数插入到已排序的有序数列中. python代码实现: def direct_insert_sort(l): for i in range(1,len(l)): key = l[i] j = i-1 while j>=0: if key<l[j]: l[j+1] = l[j] l[j] = key j -= 1 return l a = [2,3,1,5,4,4]

Python 中的列表排序函数

sorted(iterable, cmp=None, key=None, reverse=False) L.sort(cmp=None, key=None, reverse=False) iterable:是可迭代类型;cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;reverse:排序规则. reverse = True 或者 reverse = False,有默认值.返回值:是一个经过排序

Python中关于列表排序并保留id

新手才开始写博客,不周之处请原谅,有错误请指针. >>> a = [1,4,2,5,3]>>> b = sorted(enumerate(a),key = lambda x:x[1])>>> b[(0, 1), (2, 2), (4, 3), (1, 4), (3, 5)]>>> b[1](2, 2)>>> b[1][1]2>>> b[1][0]2 关于enumerate()使用方法(copy来的)

python中的列表及numpy数组排序

一.列表排序  # python中对列表排序有sort.sorted两种方法,其中sort是列表内置方法,其帮助文档如下:In [1]: help(sorted) Help on built-in function sorted in module builtins: sorted(iterable, /, *, key=None, reverse=False) Return a new list containing all items from the iterable in ascendi

Python中对复杂数据结构排序(类似C中结构体数据结构)

Python中排序主要有两个函数:sorted和列表成员函数sort,两者除了调用方式有些区别外,最显著的区别是sorted会新建一个排序好的列表并返回,而sort是修改原列表并排好序.sorted的原型是: sorted(iterable, cmp=None, key=None, reverse=False) sort的原型是: list.sort(cmp=None, key=None, reverse=False) 其中cmp和key都是函数引用,即可以传入函数名.这两个函数都是对list里

python中sorted函数的理解(对list列表排序,对dict字典排序)

在python手册中: sorted(iterable[,cmp,[,key[,reverse=True]]]) 作用:Return a new sorted list from the items in iterable. 第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list). 可选的参数有三个,cmp.key和reverse. 1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个

Python中字符串List按照长度排序 - python

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 下面看下字符串List按照长度排序(python)的实现方法 myList = ['青海省','内蒙古自治区','西藏自治区','新疆维吾尔自治区','广西壮族自治区'] 1.首先得到每个字符串长度 2.排序,选择sorted或者 list.sort()进行排序 内置sorted返回一个新的列表,而list.sort是对列表进行操作 sorted(iterable, cmp=None, key=None, rever