列表排序的不同实现方法(Python实现)

本文详细介绍了多种排序算法的实现,包括迭代和递归的选择排序、归并排序以及侏儒排序等,提供了具体代码示例,有助于理解和掌握不同排序方法的特点。

在很多公司的笔试题中都会涉及到一些排序的题目, 一下提供了一些排序方法的实现供参考:

 

迭代方法实现选择排序:

def selection_sort(ori_list):
    '''
    selection sort
    best: O(n^2), worst: O(n^2), average: O(n^2), space: O(1)
    '''
    for i in range(len(ori_list)):
        pos = i
        for j in range(i+1, len(ori_list)):
                if ori_list[j] < ori_list[pos]:
                    pos = j
        ori_list[pos], ori_list[i] = ori_list[i], ori_list[pos]
    return ori_list

递归方法实现选择排序:

def selection_sort1(ori_list, i):
    if i == 0: return
    pos = i
    for j in range(i):
        if ori_list[j] > ori_list[pos]:
            pos = j
    ori_list[pos], ori_list[i] = ori_list[i], ori_list[pos]
    selection_sort1(ori_list, i-1)

 归并排序:

def mergesort(seq):
    '''
    归并排序
    时间复杂度:θ(nlgn)
    '''
    mid = len(seq)//2
    lft, rht = seq[:mid], seq[mid:]
    
    if len(lft) > 1:
        lft = mergesort(lft)
    if len(rht) > 1:
        rht = mergesort(rht)
    res = []
    while lft and rht:
        if lft[-1] >= rht[-1]:
            res.append(lft.pop())
        else:
            res.append(rht.pop())
    res.reverse()
    return (lft or rht) + res

侏儒排序:

def gnomesort(seq):
    '''
    侏儒排序
    best:Ω(n), worst: O(n^2)
    '''
    i = 0
    while i < len(seq):
        if i == 0 or seq[i-1] <= seq[i]:
            i += 1
        else:
            seq[i-1], seq[i] = seq[i], seq[i-1]
            i -= 1
    return seq

 

转载于:https://www.cnblogs.com/donlin-zhang/p/9122499.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值