美文网首页
python笔试面试项目实战2020百练6归并排序快速排序

python笔试面试项目实战2020百练6归并排序快速排序

作者: python测试开发 | 来源:发表于2020-01-14 15:57 被阅读0次

归并排序

现在,我们将注意⼒转向使⽤分治策略改进排序算法。要研究的第⼀个算法是归并排序 ,它是递归算法,每次将⼀个列表⼀分为⼆。如果列表为空或只有⼀个元素,那么从定义上来说它就是有序的(基本情况)。如果列表不⽌⼀个元素,就将列表⼀分为⼆,并对两部分都递归调⽤归并排序。当两部分都有序后,就进⾏归并 这⼀基本操作。归并是指将两个较⼩的有序列表归并为⼀个有序列表的过程。

图片.png
def mergeSort(items):
    print("Splitting ",items)
    if len(items)>1:
        mid = len(items)//2
        lefthalf = items[:mid]
        righthalf = items[mid:]

        mergeSort(lefthalf)
        mergeSort(righthalf)

        i = j = k = 0
        while i<len(lefthalf) and j<len(righthalf):
            if lefthalf[i]<righthalf[j]:
                items[k]=lefthalf[i]
                i=i+1
            else:
                items[k]=righthalf[j]
                j=j+1
            k=k+1

        while i<len(lefthalf):
            items[k]=lefthalf[i]
            i=i+1
            k=k+1

        while j<len(righthalf):
            items[k]=righthalf[j]
            j=j+1
            k=k+1
    print("Merging ",items)

items = [54,26,93,17,77,31,44,55,20]
mergeSort(items)
print(items)

items = [21, 1, 26, 45, 29, 28, 2, 9, 16, 49, 39, 27, 43, 34, 46, 40] 
mergeSort(items)
print(items)

参考资料

希尔排序

和归并排序⼀样,快速排序 也采⽤分治策略,但不使⽤额外的存储空间。不过,代价是列表可能不会被⼀分为⼆。出现这种情况时,算法的效率会有所下降。

快速排序算法⾸先选出⼀个基准值 。尽管有很多种选法,但为简单起⻅,本节选取列表中的第⼀个元素。基准值的作⽤是帮助切分列表。在最终的有序列表中,基准值的位置通常被称作分割点 ,算法在分割点切分列表,以进⾏对快速排序的⼦调⽤。

图片.png 图片.png 图片.png
def quickSort(alist):
    quickSortHelper(alist,0,len(alist)-1)

def quickSortHelper(alist,first,last):
    if first<last:

        splitpoint = partition(alist,first,last)

        quickSortHelper(alist,first,splitpoint-1)
        quickSortHelper(alist,splitpoint+1,last)

def partition(alist,first,last):
    pivotvalue = alist[first]

    leftmark = first+1
    rightmark = last

    done = False
    while not done:

        while leftmark <= rightmark and alist[leftmark] <= pivotvalue:
            leftmark = leftmark + 1

        while alist[rightmark] >= pivotvalue and rightmark >= leftmark:
            rightmark = rightmark -1

        if rightmark < leftmark:
            done = True
        else:
            temp = alist[leftmark]
            alist[leftmark] = alist[rightmark]
            alist[rightmark] = temp

    temp = alist[first]
    alist[first] = alist[rightmark]
    alist[rightmark] = temp


    return rightmark

alist = [54,26,93,17,77,31,44,55,20]
quickSort(alist)
print(alist)

相关文章

  • python笔试面试项目实战2020百练6归并排序快速排序

    归并排序 现在,我们将注意⼒转向使⽤分治策略改进排序算法。要研究的第⼀个算法是归并排序 ,它是递归算法,每次将⼀个...

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • 排序

    1 冒泡排序 2 选择排序 3 插入排序 4 归并排序 5 快速排序 6 堆排序

  • 七大排序算法的 Python

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • 八大排序算法的 Python 实现(转)

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • php-归并排序、快速排序、堆排序

    归并排序、快速排序、堆排序 时间复杂度 O(nlogn) 归并排序 快速排序(快排) 堆排序

  • Python实现程序员必备之排序算法汇总

    本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。 一、快...

  • 排序

    排序 快速排序 归并排序 计数排序 Python实现 理解 详解 稳定:如果a原本在b前面,而a=b,排序之后a仍...

  • 排序方法

    1.选择排序 2.插入排序 3.冒泡排序 归并排序归并排序5.快速排序快速排序

网友评论

      本文标题:python笔试面试项目实战2020百练6归并排序快速排序

      本文链接:https://www.haomeiwen.com/subject/dphaactx.html