`

python 归并排序

 
阅读更多

排序思路:

1.将数组分成两组A,B,建立临时数组 C,C长度=A + B

2. i,j分别属于A,B

3. 若A[i] > B[j] , 将B[j]放入C, j++; 否则 A[i]放入C, i++

4.循环3步骤,将A或B中剩余的元素放入C,再将C复制到数组中

5.递归3-4直到A,B序列的长度=1

 

#归并排序
class MergeSort:

    def __init__(self, arrData):
        self.arrData = arrData;
        self.tmpData=[];
        #建立临时数组
        for i in range(len(self.arrData)):
            self.tmpData.append(0);
        return;
    #left 要排序的序列的最小索引
    #right 要排序的序列的最大索引
    def sortHalf(self,arrData,left,right):
        center = (left + right) // 2;
        self.mergeSort(arrData,left,center,right);
        return;
    #排序方法
    #[left,center]为第一个序列
    #[center, right]为第二个序列
    #两个序列进行归并排序
    def mergeSort(self,arrData,left,center,right):
        ##将左边和右边递归分别分成两组再进行排序
        #直到两个序列的长度为1后停止递归
        if left < center :
           self.sortHalf(arrData,left,center);
        if center < right:
            self.sortHalf(arrData,center+1,right);
        i = left;
        j = center + 1;
        k = i;
        #排序算法
        while k <= right:
            #print(i,center,j);
            if i > center:
                self.tmpData[k] = arrData[j];
                j = j + 1;
            elif j > right:
                self.tmpData[k] = arrData[i];
                i = i + 1;
            elif arrData[i] > arrData[j]:
                self.tmpData[k] = arrData[j];
                j = j + 1;
            else:
                self.tmpData[k] = arrData[i];
                i = i + 1;
            k = k + 1;
        #复制tmpData序列到arrData序列
        for l in range(left,right + 1):
            arrData[l] = self.tmpData[l];
        return;
    #排序入口
    def sort(self):
        arrData = self.arrData;
        left = 0;
        right = len(arrData) - 1;
        center = (left + right) // 2;
        self.sortHalf(arrData,left,right);
        return;
    def __del__(self):
        del self.tmpData;
arr = [7,2,5,3,1,8,6,100,48,38,45,20,34,67,12,23,90,58];
print(arr);
shellSort = MergeSort(arr);
shellSort.sort();
print(arr);

 

归并排序的时间复杂度为O(nLog2n),空间效率较差 

 

分享到:
评论

相关推荐

    Python 归并排序算法

    归并排序 Python 归并排序算法

    Python归并排序.docx

    ### Python实现归并排序 #### 一、归并排序简介 归并排序(Merge Sort)是一种高效的、基于比较的排序算法。它采用分治法(Divide and Conquer)策略来实现排序。归并排序的基本思想是将待排序的序列分成两部分,...

    python归并排序算法.md

    归并排序算法

    python归并排序算法过程实例讲解

    关于python的算法一直都是让我们又爱又恨,但是如果可以灵活运用起来,对我们的编写代码过程,可以大大提高效率,针对算法之一“归并排序”的灵活掌握,一起来看下吧~ 归并算法——小试牛刀 实例内容: 有 1 个无序...

    归并排序.py 使用python代码实现

    归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用...

    基于python的排序算法-归并排序Merge Sort

    以下是一个基本的Python归并排序实现示例: ```python def merge_sort(arr): if len(arr) return arr # 分割 mid = len(arr) // 2 left_half = arr[:mid] right_half = arr[mid:] # 征服 left_half = ...

    归并排序算法,python实现,动态图

    详细描述请查看该文章:https://blog.csdn.net/qq_28531269/article/details/122415336?spm=1001.2014.3001.5502

    python中归并排序源码

    pyhton编写的归并排序是一种高效的快速排序算法,也是python本身内部的排序算法,它不仅时间复杂度小而且简单,符合分而治之的原则,也让很多程序员喜欢,大家快打开看看吧。

    基于python的归并排序算法设计与实现

    基于python的归并排序算法设计与实现

    归并排序在Python中的实现与优化

    在Python中实现归并排序相对简单,但要实现优化和原地排序则需要更多的技巧。通过上述代码示例,我们可以看到如何使用Python进行归并排序的实现和优化。归并排序不仅在理论上有着重要的地位,而且在实际应用中也非常...

    Python实现归并排序.rar

    **Python实现归并排序** 归并排序是一种基于分治策略的高效排序算法,它将大问题分解为小问题来解决,然后再将小问题的结果合并,最终得到完整的解决方案。在Python中,我们可以用简洁的代码来实现这个算法。下面将...

    python编程实现归并排序

    在Python中实现归并排序,我们可以分为以下几个步骤来理解: 1. **分割**:首先,我们需要将原始数组不断地分成两半,直到每个子数组只剩下一个元素。这个过程是通过递归实现的。例如,对于数组[3, 5, 9, 4, 7, 8]...

    python-归并排序算法.docx

    以下是一个简单的归并排序Python代码实现: ```python def merge_sort(arr): if len(arr) return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left,...

    python基本算法之实现归并排序(Merge sort)

    在Python中,归并排序的代码实现通常涉及两个关键函数:`merge_sort()` 和 `merge()`。`merge_sort()`负责递归地将数组拆分,而`merge()`则负责合并两个已排序的子数组。以下是一个简单的归并排序代码示例: ```...

    python 实现归并排序算法

    /usr/bin/python import sys def merge(array, q, p, r): left_array = array[q:p+1] right_array = array[p+1:r+1] left_array_num = len(left_array) right_array_num = len(right_array) i, j , k= [0, 0, q] ...

    Python3实现归并排序(源代码)

    下面是一个使用Python3实现的归并排序示例代码,该代码详细展示了归并排序的实现过程: ```python def merge_sort(arr): """ 归并排序算法 参数: arr -- 待排序的整数数组 返回值: sorted_arr -- 排序后...

    python实现归并排序算法

    以下是一个完整的Python归并排序实现: ```python def merge_sort(alist): if len(alist) return alist num = len(alist) // 2 left = merge_sort(alist[:num]) right = merge_sort(alist[num:]) return...

    python-十大排序算法之归并排序

    python python_十大排序算法之归并排序

    常见的排序方法_python插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数_AllSort.zip

    常见的排序方法_python插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数_AllSort

    归并排序python源码.txt

    在Python中实现归并排序,需要编写两个函数:`merge()`和`mergesort()`。`merge()`函数负责将两个已排序的数组(列表)合并成一个有序的数组。`mergesort()`函数则递归地将一个数组分为两个部分,直到每个部分只剩下...

Global site tag (gtag.js) - Google Analytics