归并过程中可以确保两个相等的当前元素中,把处在前面的元素保存在结不雅序列的前面,是以归并排序是稳定的,当时光复杂度为O(nlog2n),空间复杂度为O(n)。
Python源代码:
- #-------------------------归并排序--------------------------------
- #这是归并的函数
- # 将序列data_list[first...mid]与序列data_list[mid+1...last]进行归并
- def mergearray(data_list,first,mid,last,temp):
- #对i,j,k分别进行赋值
- i,j,k = first,mid+1,0
- #当阁下两边都稀有时进行比较,取较小的数
- while (i <= mid) and (j <= last):
- if data_list[i] <= data_list[j]:
- temp[k] = data_list[i]
- i = i+1
- k = k+1
- else:
- temp[k] = data_list[j]
- j = j+1
- k = k+1
- #如不雅左边序列还稀有
- while (i <= mid):
- temp[k] = data_list[i]
- i = i+1
- k = k+1
- #如不雅右边序列还稀有
- while (j <= last):
- temp[k] = data_list[j]
- j = j+1
- k = k+1
- #将temp傍边该段有序元素赋值给data_list待排序列使之部分有序
- for x in range(0,k):
- data_list[first+x] = temp[x]
- # 这是分组的函数
- def merge_sort(data_list,first,last,temp):
- if first < last:
- mid = (int)((first + last) / 2)
- #使左边序列有序
- merge_sort(data_list,first,mid,temp)
- #使右边序列有序
- merge_sort(data_list,mid+1,last,temp)
- #将两个有序序列归并
- mergearray(data_list,first,mid,last,temp)
- # 归并排序的函数
- def merge_sort_array(data_list):
- #声明一个长度为len(data_list)的空列表
- temp = len(data_list)*[None]
- #调用归并排序
- merge_sort(data_list,0,len(data_list)-1,temp
推荐阅读
Android中内存优化的那些事 - 一个有关图片的优化记录
客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell……默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读
本文标题:常用排序算法比较与分析
地址:http://www.17bianji.com/lsqh/35003.html
1/2 1