Divide and Conquer&Count Inversions归并排序求逆序数
来源:互联网 发布:顶级时尚杂志知乎 编辑:程序博客网 时间:2024/06/10 13:34
Divide and Conquer
The attached le Q8.txt contains 100,000 integers between 1 and 100,000 (each row has a single integer), the order of these integers is random and no integer is repeated.
刚写程序是用的visual C++,遇到了数据溢出的问题,发现long long在visual C++中不能使用,换成double之后可以,中间其实还试过了__int64,也是不可以,不过总算double可以了。Visual Studio中可以使用long long,这是我第一次使用C++,所以遇到了很多问题,仅写此篇留念。
写代码过程中,由于函数定义时忘记更改数据类型了,只修改了函数内部的,所以一开始怎么都不对,还好后面发现了,虽然用了很多的时间,但是我相信,以后一定不会再犯此类问题了,即便有也能很快发现,总之,很惭愧。
此代码中包括第一次使用的C++读取文件并放入数组。
#include<iostream>#include <fstream>#include<iomanip> #define n 100000int arr[100000];using namespace std;double MergeAndCount(int ll,int lr,int rl,int rr){double count=0;int i,j=rl,k=0;int *tmp;tmp = new int[rr-ll+1];for(i=ll;i<=lr;i++){while(j<=rr && arr[i]>arr[j])tmp[k++] = arr[j++];count += j-rl;tmp[k++] = arr[i];}while(j<=rr)tmp[k++] = arr[j++];memcpy(arr+ll, tmp, sizeof(int)*(rr-ll+1));delete tmp;return count;}double SortAndCount(int i,int j){if(i<j){int mid = i+((j-i)/2);double r= SortAndCount(i,mid);double l= SortAndCount(mid+1,j);double m = MergeAndCount(i,mid,mid+1,j);return r+l+m;}elsereturn 0;}int main(){ifstream in("Q8.txt", ios::in);char buf[10];if(!in.is_open()){cout<<"Error opening file!";exit(1);}int i=0;while(!in.eof()){in.getline(buf,10); //int line;arr[i++] = atoi(buf); //in>>line; data[k]=line;}double number = SortAndCount(0,n-1);cout<<"The number of invertions is "<<setprecision(20)<<number<<'.'<<endl;return 0;system("pause");}
0 0
- Divide and Conquer&Count Inversions归并排序求逆序数
- SGU 180. Inversions(归并排序求逆序数)
- 【SGU】180. Inversions(归并排序求逆序数)
- Divide and Conquer~ 计算inversions
- 归并排序(mergeSort) 与 分而治之策略(divide and conquer)
- 归并排序,求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 求逆序数(归并排序)
- list、set、Map的区别和使用
- 最小生成树之普里姆算法
- oracle入门很简单:三、配置oracle监听程序
- vim 全选复制操作 on mac
- Android 5.0中的CoordinatorLayout使用技巧
- Divide and Conquer&Count Inversions归并排序求逆序数
- 静态工厂类java
- 多任务深度学习(MultiTask Learning)
- Rreact Native 常见错误总结
- css解析原理
- JavaScript-对闭包的理解
- 线段树
- idea 15.0.2 破解
- Java面试题大全(Java基础十)