基本思想:分治。 归并排序是以数组的中间点来分。 时间复杂度确定是nlogn 1:确定分界点mid = (l + r) / 2,是下标的中间值。 2:递归排序左右两边。排完序后,左右两边都是有序的了。 3:归并。把两个有序的数组,归并成一个有序的数组。 1 #include <bits/stdc++ ...
分类:
编程语言 时间:
2020-06-27 14:43:03
阅读次数:
68
内部排序 -插入排序 -直接插入排序 -折半插入排序 -希尔排序 -交换排序 -冒泡排序 -快速排序 -选择排序 -简单选择排序 -堆排序 -归并排序 -基数排序 外部排序 -多路归并排序 1.直接插入排序 算法思路:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,指导全部记录插入 ...
分类:
编程语言 时间:
2020-06-24 16:30:37
阅读次数:
52
归并排序 给定长度为n的序列,归并排序并输出序列 我们把归并排序这样的大问题拆成两个小问题: 即将大数组分割成两个小数组,对这两个小数组分别进行归并排序并合并这两个小数组来得到一个排好序的大数组。 简单来说就两步:拆分,合并。 拆分是将原数组拆分成几个小段 合并是将这几个小段再合起来 #includ ...
分类:
编程语言 时间:
2020-06-23 17:32:23
阅读次数:
51
""" 归并排序 """ from math import floor merge_list = [11, 6743, 4656, 2321, 12, 54, 876, 232] # 合并两个数据,产生一个已经排序好的新的数组 def merge(left, right): # 设定临时数组 res ...
分类:
编程语言 时间:
2020-06-22 19:18:00
阅读次数:
61
归并排序采用了分治法的原理,将原先完整的数组拆分成一个一个的单独数组,然后再通过将这些单独的数组一一进行大小比较,汇聚成一个个较大的数组,最后再汇聚成一个完整的数组 这个地方需要说明的是:merge就是汇聚的过程,而mergeSort就是分治法的体现 代码可以进一步的优化,抽时间再解决吧 #incl ...
分类:
编程语言 时间:
2020-06-22 01:42:11
阅读次数:
73
一、归并排序 要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起。如下图: 重点: 归并排序使用的是分治思想。分治,就是分而治之,将一个大问题分解成小的子问题来解决。 分治思想跟递归思想很像,分治算法一般是用递归实现。 分治是一种解决问题的处理思想, ...
分类:
编程语言 时间:
2020-06-21 23:38:44
阅读次数:
74
《算法导论》第二章,讨论了归并排序,其中思考题2-4提出了逆序对问题,需要注意边界条件: # inversion 逆序对 A =[3,1,4,5,2,-3,6] def inversion(arr): ''' 冒泡版 ''' invs = [] for i in range(len(arr)): f ...
分类:
编程语言 时间:
2020-06-21 23:32:57
阅读次数:
67
普通链表的插入,选择,冒泡,计数排序,交叉排序,奇偶交叉以及归并排序(排列排序),链表的反转,循环元素移动。 ...
分类:
编程语言 时间:
2020-06-21 09:15:20
阅读次数:
62
快排(双指针): void quick_sort(int q[],int l,int r) { if(l>=r)return ; int i=l-1,j=r+1,x=q[(l+r)>>1]; while(i<j) { do i++;while(q[i]<x); do j--;while(q[j]>x ...
分类:
编程语言 时间:
2020-06-18 21:11:23
阅读次数:
66
需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法,归并排序将下面数组中 的值按照从小到大的顺序进行排序。 $arr=array(11,3,56,62,21,66,32,78,36,76,39,88,34); 冒泡排序(Bubble Sort) 算法原理:是一种简单的排序算法。它重复地走访 ...
分类:
编程语言 时间:
2020-06-18 16:30:56
阅读次数:
49