算法学习—— 归并排序
2013-03-18 00:44
309 查看
归并排序法(Merge Sort)是分治法思想运用的一个典范。
其主要算法操作可以分为以下步骤:
Step 1:将n个元素分成两个含n/2元素的子序列
Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列)
Step 3:合并两个已排序好的序列
每天进步一点点!
c++代码如下:
View Code
其主要算法操作可以分为以下步骤:
Step 1:将n个元素分成两个含n/2元素的子序列
Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列)
Step 3:合并两个已排序好的序列
每天进步一点点!
c++代码如下:
View Code
class MergeSort { public: void Merge(int* data,int left,int center,int right); void Sort(int* data,int left,int right); }; void MergeSort::Sort(int* data,int left,int right) { if(left < right) { int center = (left + right)/2; Sort(data,left,center); Sort(data,center + 1,right); Merge(data,left,center,right); } } void MergeSort::Merge(int* data,int left,int center,int right) { int n1 = center - left + 1; int n2 = right -center; int leftArr[n1]; int rightArr[n2]; int i; int j; int k; for(i = 0;i < n1;++i) { leftArr[i] = data[left + i]; } for(j = 0;j < n2;++j) { rightArr[j] = data[center + j + 1]; } i = j = 0; for(k = left;k <= right;++k) { if(leftArr[i] <= rightArr[j]) { data[k] = leftArr[i]; ++i; } else { data[k] = rightArr[j]; ++j; } if(n1 == i) { ++k; for(;j < n2;++j) { data[k] = rightArr[j]; ++k; } } if(n2 == j) { ++k; for(;i < n1;++i) { data[k] = leftArr[i]; ++k; } } } }
相关文章推荐
- 算法入门学习----2.1归并排序
- 《数据结构与算法——C语言实现》学习笔记——归并排序
- 算法入门学习----2.1归并排序
- 每天学习算法系列—内部排序之归并排序和快速排序
- 【算法导论学习-002】归并排序(MergeSort)
- (四)算法学习之归并排序
- 算法学习(10)-递归 之归并排序
- 算法学习之路:分治策略-归并排序-java实现
- 算法(第四版)学习笔记之java实现归并排序
- 算法学习(10)-递归 之归并排序
- 经典算法学习——归并排序
- 【从零学习经典算法系列】分治策略实例——归并排序(Mergesort)
- 算法学习--归并排序
- 【算法学习笔记】20.算法设计初步 归并排序 求逆序数
- 算法学习(10)-递归 之归并排序
- 算法学习记录2 归并排序
- 【算法学习笔记】20.算法设计初步 归并排序 求逆序数
- 算法导论学习之归并排序
- 算法学习 - 链表之归并排序_O(1)空间_O(NlogN)时间_C++
- 数据结构&算法学习笔记: 归并排序