算法学习—— 归并排序
归并排序法(Merge Sort)是分治法思想运用的一个典范。
其主要算法操作可以分为以下步骤:
Step 1:将n个元素分成两个含n/2元素的子序列
Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列)
Step 3:合并两个已排序好的序列
每天进步一点点!
c++代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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; } } } }