/*********************************************************************************************** 1.设定两个指针,最初位置分别为两个已经排序序列的起始位置 2.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 3.重复步骤3直到某一指针达到序列尾 4.将另一序列剩下的所有元素直接复制到合并序列尾 归并排序: 归并排序具体工作原理如下(假设序列共有n个元素): 1.将序列每相邻两个数字进行归并操作,形成floor(n / 2)个序列,排序后每个序列包含两个元素 2.将上述序列再次归并,形成floor(n / 4)个序列,每个序列包含四个元素 3.重复步骤2,直到所有元素排序完毕 归并排序是稳定的,它的最差,平均,最好时间都是O(nlogn)。但是它需要额外的存储空间. 何问起 hovertree.com 归并排序法(Merge Sort,以下简称MS)是分治法思想运用的一个典范。 其主要算法操作可以分为以下步骤: Step 1:将n个元素分成两个含n/2元素的子序列 Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列) Step 3:合并两个已排序好的序列 ************************************************************************************************/ #include#include #include #include #include #include #include #include #include #include using namespace std; void Random(int a[],int n) { int i=0; srand( (unsigned)time( NULL ) ); while(i >1; //mid = (end + begin) / 2; 防止数据加法溢出 merge_sort(a, begin, mid); //分治 merge_sort(a, mid + 1, end); //分治 merge(a, begin, mid, end); //合并两个已排序的数列 } } int main() { int a[20]; Random(a,20); for(int i=0;i<20;i++) { cout<<" "< <<" "; } merge_sort(a, 0, 20-1); for(int i=0;i<20;i++) { cout<<" "< <
推荐: