特别朴实的,写了插入和合并排序算法。
然后一遍遍比较,如果与end数组相等,则再运行一遍该排序,然后输出。否则运行另一种排序。
#include <iostream>
#include <algorithm>
using namespace std;
int Insert(int first[], int *end, int n)
{
int *s = new int[n];
int i,j,p;
int temp;
int flage = 0;
for (i = 0; i < n; i++)
{
s[i] = first[i];//复制数组,防止原数组改变
}
for (i = 1; i < n; i++)
{
int flag = 1;
temp = s[i];
p = i - 1;
while (p >= 00 && temp < s[p])
{
s[p + 1] = s[p];
p--;
}
s[p + 1] = temp;
for (j = 0; j < n; j++)
{
if (s[j] != end[j])
{
flag = 0; break;
}
}
if (flage == 1)
{
cout << "Insertion Sort" << endl;
for (i = 0; i < n; i++)
{
cout << s[i];
if (i != n - 1)cout << " ";
}
return flage;
}
if (flag == 1)flage = 1;
}
return flage;
}
int Merge(int *first,int* end, int n)
{
int x=2;
int i,j;
int *s = new int[n];
int flage = 0;
for (i = 0; i < n; i++)
{
s[i] = first[i];//复制数组,防止原数组改变
}
while(x<n)
{
int flag = 1;
for (i = 0; i < n; i=i + x)
{
if(i+x>n)
{
sort(s+i , s + n);
}
else sort(s + i, s + i + x);
}
for (j = 0; j < n; j++)
{
if (s[j] != end[j])
{
flag = 0;
break;
}
}
x*=2;
if (flage == 1)
{
cout << "Merge Sort" << endl;
for (i = 0; i < n; i++)
{
cout << s[i];
if (i != n - 1)cout << " ";
}
return flage;
}
if (flag == 1)flage = 1;
}
if (x >= n)//最后一次排序
{
int flag = 1;
sort(s, s + n);
for (j = 0; j < n; j++)
{
int flag = 1;
if (s[j] != end[j])
{
flag = 0;
break;
}
}
if (flag == 1)flage = 1;
x *= 2;
if (flage == 1)
{
cout << "Merge Sort" << endl;
for (i = 0; i < n; i++)
{
cout << s[i];
if (i != n - 1)cout << " ";
}
return flage;
}
}
return flage;
}
int main()
{
int n;
cin >> n;
int i;
int *first = new int[n];
int *end = new int[n];
for (i = 0; i < n; i++)
{
cin >> first[i];
}
for (i = 0; i < n; i++)
{
cin >> end[i];
}
if(!Insert(first,end, n))
Merge(first, end,n);
system("pause");
return 0;
}