美文网首页
线性排序算法-归并排序(3)

线性排序算法-归并排序(3)

作者: ac619467fef3 | 来源:发表于2018-07-13 21:16 被阅读45次

分治是优化算法中的重要思想。

归并排序的主要技巧,如何处理两个分别已经排好序的数组?

采用额外空间O(n),交替遍历两个数组,时间复杂度为O(n)

将原数组不断向下拆分

举例说明,16个整形数组向下拆分
16-->(8,8)-->(4,4)-->(2,2)(2,2)(2,2)(2,2)->(1,1)(1,1)(1,1)(1,1)(1,1)(1,1)(1,1)(1,1)(1,1)

(1,1)采用归并,生成排好序的(2)
(2,2)采用归并,生成拍好序的(4)
(4,4)-->(8)
(8,8)-->16

    def __Merge(self,a,l,mid,r):
        #排序对象a[l,mid) [mid,r)
        b=[a[i] for i in range(l,r)]
        i = 0
        j = mid-l
        for k in range(l,r):
            if  i == mid-l:
                a[k] = b[j]
                j = j+1
            elif j == r-l :
                a[k] = b[i]
                i = i+1
            elif b[i] > b[j]:
                a[k] = b[j]
                j = j+1            
            else:
                a[k] = b[i]
                i = i+1

循环调用

    def MergeSort2(self,a):
        sz = 1
        total = len(a)
        while(sz< total):
            i = 0
            while(i<total-sz-1):
                self.__Merge(a,i,i+sz,min(i+sz+sz,total))
                i = i+sz+sz
            sz = sz+sz

递归调用

    def __MergeSort(self,a,l,r):
        #排序对象 a[l,r)        
        if (l+1) >= r:
            return        
        """
        ## 在小数组情况下,用插入排序,实验优化效果不好
        if (l+6)<=r:
            self.InsertionSortPart(a,l,r)
            return
        """
        mid = l+(r-l)//2
        self.__MergeSort(a,l,mid)
        self.__MergeSort(a,mid,r)
        self.__Merge(a,l,mid,r)

相关文章

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • 线性排序

    一、线性排序算法介绍 线性排序算法包括桶排序、计数排序、基数排序。 线性排序算法的时间复杂度为O(n)。 此3种排...

  • 桶排序、计数排序、基数排序

    一、线性排序算法介绍 线性排序算法包括桶排序、计数排序、基数排序。 线性排序算法的时间复杂度为O(n)。 此3种排...

  • 常见排序算法

    1 前言 2 排序基础2.1 选择排序2.2 插入排序 3 高级排序算法3.1 归并排序3.1.1 插入排序与归并...

  • 11|线性排序:如何根据年龄给100万用户数据排序?

    一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法的时间复杂度为O(n)。3....

  • 排序算法

    排序算法 1、冒泡排序: 2、插入排序 3、希尔排序 4、堆排序 5、归并排序

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

网友评论

      本文标题:线性排序算法-归并排序(3)

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