描述:從小到大排列,並計算比較次數
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int N = 10001;
const int MAXX= 100056;
int data[N];
int times;
void merage(int left,int mid,int right)
{
int l1[N]={0},l2[N]={0};
int i=1,j=1;
int n1=mid-left+1;
int n2=right-mid;
for(i=1;i<=n1;i++)
l1[i]=data[left+i-1];
l1[n1+1]=MAXX;
for(i=1;i<=n2;i++)
l2[i]=data[mid+i];
l2[n2+1]=MAXX;
i=1,j=1;
for(int k=left;k<=right;k++)
{
if(l1[i]<=l2[j])
{
data[k]=l1[i];
i++;
times++;
}
else
{
data[k]=l2[j];
j++;
times++;
}
}
}
void meragesort(int left,int right)
{
int mid=0;
if(left>=right)
return;
else
{
mid = (left+right)/2;
meragesort(left,mid);
meragesort(mid+1,right);
merage(left,mid,right);
}
}
int main()
{
int n=0;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d,",&data[i]);
meragesort(1,n);
for(int i=1;i<=n;i++)
cout<<data[i]<<" ";
cout<<endl;
cout<<times;
return 0;
}