python 冒泡排序,快排

一、冒泡排序

1.1、冒泡的原理

    1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    3. 针对所有的元素重复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。   

2.1、冒泡排序的代码实现

def bubble_sort(seq):
    count=len(seq)
    for i in range(0,count):
        for j in range(i+1,count):
            if seq[i]>seq[j]:
                seq[i],seq[j]=seq[j],seq[i]
    return seq
seq=[4,5,2,1,6,3]
print(bubble_sort(seq))

3.1、冒泡排序的时间复杂度

  1、最好情况:若文件的初始状态是正序的,一趟扫描即可完成排序,这是冒泡排序的最优情况时间复杂度o(n)

  2、最坏情况:若初始文件是反序的的,则冒泡排序需要两层循环,这是最坏情况时间复杂度o(n^2)

  3、平均时间复杂度o(n^2)

二、快排

  2.1 快排原理

   快排是冒泡排序的改进,抽取第一个值作为比较值,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比比较值小,另一部分比比较值大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最后将分开的来两部分加比较值合并到一起,完成排序。

  2.2 快排的代码实现 

def quck_sort(seq):
    if seq==[]:
        return []
    else:
        pivot=seq[0]
        low_list=quck_sort([x for x in seq if x<pivot]) #比比较值小的部分递归排序
        upper_list=quck_sort([x for x in seq if x>pivot])#比比较值大的部分递归排序
        return low_list+[pivot]+upper_list #将三者进行合并,注意将比较值转换成列表
print(quck_sort(seq))

  2.3 快排的时间复杂度

  1、最优情况:比较值刚好将列表分成等分了两部分,时间复杂度o(nlogn)

  2、最坏情况:每次递归比较值都是最小值,导致列表分开不均衡,时间复杂度o(n^2)

  3、平局时间复杂度o(nlogn)

猜你喜欢

转载自www.cnblogs.com/dushangguzhousuoli/p/11028916.html