快速排序算法

定义:归并排序使用了二分法。
归根到底的思想:分而之治。拿到一个长数组,把它分为左边和右边两份。

全是有序的序列。即先使每个子序列有序,再使子序列段间有序。若把两个有序数列合并成一个有序表称为二归并法。
归并排序是稳定的排序

实现步骤:
1.将数组按照middle进行递归拆分,最后分到最细之后再将期全盘对两个有序数组进行排序的方法对其进行排序
2.合并排序数组的操作行为:
同时对两个数组的第一个位置进行比大小,将小的放入一个空数组,然后被放入空数组的那个位置的坐标 往后行色匆匆一个
然后继续和另外一个数组的一个位置进行比较,以此类推
到最后任何一个数组先出栈(系统自动分配的内存地址),就将另一个

 

 

 

def Merge(arr_a,arr_b):
    i=j=0
    res=[]
    while i<len(arr_a) and j<len(arr_b):
        if arr_a[i] <=arr_b[j]:
            res.append(arr_a[i])
            i+=1
        else:
            res.append(arr_b[j])
            j+=1
    if i==len(arr_a):
        res.extend(arr_b[j:])
    else:
        res.extend(arr_a[i:])
    return res



def MergeSort(arr):
    mid=len(arr)//2
    if len(arr)<=1:
        return arr
    left =MergeSort(arr[:mid])
    right=MergeSort(arr[mid:])
    return Merge(left,right)

arr=[8,4,3,9,-9999]
print(MergeSort(arr))


e:\pythonExcise>python Merge.py
[-9999, 3, 4, 8, 9]

 

  • 时间复杂度与空间复杂度

当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差。

而当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好。

所以,数据越随机分布时,快速排序性能越好;数据越接近有序,快速排序性能越差。

 

快速排序在每次分割的过程中,需要 1 个空间存储基准值。而快速排序的大概需要 Nlog2N次的分割处理,所以占用空间也是 Nlog2N 个。

 

posted @ 2020-03-07 23:20  进阶的淑琴  阅读(130)  评论(0)    收藏  举报