归并排序算法是在分治算法基础上设计出来的一种排序算法,它可以对指定序列完成升序(由小到大)或降序(由大到小)排序,对应的时间复杂度为O(nlogn)。
归并排序算法的思路是:
1) 将整个待排序序列划分成多个不可再分的子序列,每个子序列中仅有 1 个元素;
2) 所有的子序列进行两两合并,合并过程中完成排序操作,最终合并得到的新序列就是有序序列。
代码示例
1、子序列排序
例如:[14, 27, 35, 3, 10, 33],先分成 [14, 27, 35] 和 [3, 10, 33] 两部分,从左往右依次取值比较大小,小的存储在临时变量中,再移动指针,直至一边先结束,将另一边剩下的元素直接追加到临时变量中。
def merge(arr, low, high, mid): i = low j = mid + 1 temp = [] while i <= mid and j <= high: if arr[i] < arr[j]: temp.append(arr[i]) i += 1 else: temp.append(arr[j]) j += 1 # 有一边先结束,剩下的元素元素直接追加 while i <= mid: temp.append(arr[i]) i += 1 while j <= high: temp.append(arr[j]) j += 1 arr[low:high+1] = temp # lst = [14, 27, 35, 3, 10, 33] # merge(lst, 0, 5, 2)
2、递归调用
def merge_sort(arr, low, high): if low < high: mid = (low + high) // 2 merge_sort(arr, low, mid) merge_sort(arr, mid + 1, high) merge(arr, low, high, mid) lst = [27, 13, 35, 10, 3, 33] merge_sort(lst, 0, 5) print(lst)
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/212
- 上一篇:
- Sklearn分类特征和标签编码
- 下一篇:
- Sklearn特征独热编码OneHot