排序思路:
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实现归并排序 #### 一、归并排序简介 归并排序(Merge Sort)是一种高效的、基于比较的排序算法。它采用分治法(Divide and Conquer)策略来实现排序。归并排序的基本思想是将待排序的序列分成两部分,...
归并排序算法
关于python的算法一直都是让我们又爱又恨,但是如果可以灵活运用起来,对我们的编写代码过程,可以大大提高效率,针对算法之一“归并排序”的灵活掌握,一起来看下吧~ 归并算法——小试牛刀 实例内容: 有 1 个无序...
归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用python代码实现归并排序.py 使用...
以下是一个基本的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 = ...
详细描述请查看该文章:https://blog.csdn.net/qq_28531269/article/details/122415336?spm=1001.2014.3001.5502
pyhton编写的归并排序是一种高效的快速排序算法,也是python本身内部的排序算法,它不仅时间复杂度小而且简单,符合分而治之的原则,也让很多程序员喜欢,大家快打开看看吧。
基于python的归并排序算法设计与实现
在Python中实现归并排序相对简单,但要实现优化和原地排序则需要更多的技巧。通过上述代码示例,我们可以看到如何使用Python进行归并排序的实现和优化。归并排序不仅在理论上有着重要的地位,而且在实际应用中也非常...
**Python实现归并排序** 归并排序是一种基于分治策略的高效排序算法,它将大问题分解为小问题来解决,然后再将小问题的结果合并,最终得到完整的解决方案。在Python中,我们可以用简洁的代码来实现这个算法。下面将...
在Python中实现归并排序,我们可以分为以下几个步骤来理解: 1. **分割**:首先,我们需要将原始数组不断地分成两半,直到每个子数组只剩下一个元素。这个过程是通过递归实现的。例如,对于数组[3, 5, 9, 4, 7, 8]...
以下是一个简单的归并排序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()` 和 `merge()`。`merge_sort()`负责递归地将数组拆分,而`merge()`则负责合并两个已排序的子数组。以下是一个简单的归并排序代码示例: ```...
/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实现的归并排序示例代码,该代码详细展示了归并排序的实现过程: ```python def merge_sort(arr): """ 归并排序算法 参数: arr -- 待排序的整数数组 返回值: sorted_arr -- 排序后...
以下是一个完整的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插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数_AllSort
在Python中实现归并排序,需要编写两个函数:`merge()`和`mergesort()`。`merge()`函数负责将两个已排序的数组(列表)合并成一个有序的数组。`mergesort()`函数则递归地将一个数组分为两个部分,直到每个部分只剩下...