这段代码真的可以作为MergeSort吗?这可以对数组进行排序,但它是MergeSort吗?
我的教职员工确实赞同这一点,但他可能没有正确地看到代码,我需要一些认真的帮助。
#include<iostream>
using namespace std;
int mid;
int array[8]={98, 23, 45, 14, 6, 67, 33};
void msort(int s, int e)
{
if (s<e) {
mid = (s + e) / 2;
msort(s, mid);
msort(mid + 1, e);
}
for(int i=s;i<=e;++i)
{
for(int j=i+1;j<=e;++j)
{
if(array[i]>array[j])
{
array[i] = array[i]+array[j];
array[j] = array[i]-array[j];
array[i] = array[i]-array[j];
}
}
}
}
int main() {
msort(0, 7);
for (int i=0; i<8; i++)
{
cout<<"\t"<<a[i];
}
}发布于 2017-11-02 19:48:46
不不是的。合并排序的合并阶段不应该是二次的(对于外部合并是线性的,对于就地合并是线性的)。
在您的代码中,合并阶段无法解释左、右子数组已经排序的事实,并退化为冒泡排序。
另外,我强烈建议您不要使用交换元素的方式。
https://codereview.stackexchange.com/questions/179464
复制相似问题