Python 快速排序

# -*-coding:utf-8
'''
快速排序
'''
def Partition(list, low, high):
    '''
        以列表中首个元素为基准,将列表中的元素按照与key的大小关系,
        调整元素的位置,以使得:
    [< key...| key | ... > key]        
    '''
    key = list[low]
    while low < high:
        while low < high and list[high] >= key: # 从后向前遍历列表,元素大于基准,继续比较:
            high -= 1
        while low < high and list[high] < key:  # 遍历列表,若元素小于基准:
            list[low] = list[high]
            low += 1
            list[high] = list[low]
    list[low] = key
    return low
    
def QuickSort(list,low,high):
    if low < high:
        pivotpos = Partition(list,low,high)
        QuickSort(list, low, pivotpos)
        QuickSort(list, pivotpos+1, high)
    return list

if __name__=='__main__':
    list_0 = [4,1,8,13,34,26,10,7,4]
    m = len(list_0)
    list_1 = QuickSort(list_0, 0, m-1)
    print list_1
算法性能:

1. 最坏的情况是每次划分的基准都是当前无序区间中关键字最小的元素,划分的结果是基准左边的子区间为空,而划分的另一个非空的子区间中的元素数目,仅仅比

    无序区间元素个数少1,因此,快速排序必须做n-1次划分,第i次划分开始时区间长度为n-i+1,所需的比较次数为n-i,总的比较次数最大是O(n**2);

2. 平均时间复杂度是O(nlog2n),就平均性能而言,快速排序是基于关键字比较排序算法中速度最快的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值