zoukankan      html  css  js  c++  java
  • python之快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    '''
    平均情况:
    1:n-1 1个子列表 n-1个元素
    2:n-1-1-1 2个子列表 n-1个元素确定三个值
    3:n-3-4 4个子列表 n-3个元素四个子列表
    3:n-7-8 8个子列表 n-7个元素轴值15
    4:n-31 16个子列表 n-15 轴值31

    每一轮确定元素个数 2^i-1
    2^0-1+2^1-1+...+2^i-i=n一共有的元素
    2*(1-2^i)/(1-2)-i=n
    2^(i+1)=n+i+2
    i=log(n+i+2)-1
    i约等于logn 平均轮次
    logn(n-x)=nlogn-xlogn轮次*每一次比较次数
    平均时间复杂度=nlogn
    最坏情况=O(n^2)
    '''
    '''
    如果元素比flag大,pass
    如果元素比flag小,交换位置listx[i],listx[j]=listx[j],listx[i]

    当第一个位置的元素大于flag时,
    i 指向0,原地不动,而j 继续向前走,
    当遇到下面一个比flag小的元素时,i+1,那么,
    你就永远处理不到第一个元素了
    '''

    def path_sort(list,start_index,end_index):
    flag = list[end_index]
    i = start_index - 1
    for j in range(start_index,end_index):
    if list[j] > flag:
    pass
    else:
    i += 1
    list[i],list[j]=list[j],list[i]
    list[end_index],list[i+1]=list[i+1],list[end_index]
    return i+1

    def Quick_sort(list,start_index,end_index):
    if start_index >= end_index:
    return list
    middle = path_sort(list,start_index,end_index)
    Quick_sort(list,start_index,middle-1)
    Quick_sort(list,middle+1,end_index)
    if __name__=="__main__":
    list = [6,1,54,36,4,45,5]
    Quick_sort(list,0,len(list)-1)
    print list

  • 相关阅读:
    Pollard rho模板
    GDKOI2018游记
    BZOJ2599: [IOI2011]Race
    Codeforces914E. Palindromes in a Tree
    可以删点的并查集
    本月题量 180122晚-180222午
    51nod1238 最小公倍数之和 V3
    51nod1237 最大公约数之和 V3
    hdu5608:function
    51nod1244 莫比乌斯函数之和
  • 原文地址:https://www.cnblogs.com/tom-gao/p/7902581.html
Copyright © 2011-2022 走看看