【发布时间】:2016-11-23 01:34:10
【问题描述】:
它不完全是合并排序,该算法使用合并排序计算数组中反转的数量(基本上我只是添加了一个简单的行) 从文本文件中读取和合并排序 100,000 个不同的整数需要 2.415 秒,而解决相同问题的其他人(在 coursera.com 上)则表示花费不到 0.5 秒
这是我的代码,出了什么问题?文件读取可能吗?谢谢
#include <bits/stdc++.h>
using namespace std;
int a,b,i,j,n,x,k;
int t[100000]={0};
long long int s=0;
void merge(int a, int mid, int b)
{
i=a;
j=mid+1;
k=a;
int v[100000]={0};
while(i<=mid && j<= b)
{
if (t[i]<t[j])
{v[k]=t[i];
i++;
}
else
{v[k]=t[j];
j++;
s+=mid-i+1; //this line here counts the inversions
}
k++;
}
while(i<=mid)
{v[k]=t[i];
i++; k++;}
while(j<=b)
{v[k]=t[j];
j++; k++;}
for (i=a;i<k;i++)
t[i]=v[i];
}
void mergeSort(int a, int b)
{
if(a<b)
{
int mid=(a+b)/2;
mergeSort(a,mid);
mergeSort(mid+1,b);
merge(a,mid,b);
}
}
int main(){
ifstream fin("C:\\Users\\ASUS\\Desktop\\coursera.txt");
n=100000;
for(i=0;i<n;i++)
fin>>t[i];
mergeSort(0,n-1);
cout<<endl<<s;
}
【问题讨论】:
-
请发到Code Review。
-
做完所有事情需要多长时间但是 mergeSort?
标签: c++ algorithm time-complexity mergesort divide-and-conquer