数据结构实验之排序五:归并求逆序数
来源:互联网 发布:华为硬件单片机笔试题 编辑:程序博客网 时间:2024/05/16 12:18
#include <bits/stdc++.h>using namespace std;long long int cnt; //逆序数可能是个数值很大的数字,用long long int.void Merge(int a[], int l, int mid, int r) //归并:进来一个无序数组(已用mid进行了二分,一直mid、l、r)将进来的分为两部分的数组进行排序,后存入新开的t数组中{ int t[100005]; //int t[] = new int [r - l + 1]申请一个(r - l + 1)个int元素的内存空间,相当于一个n个int元素的数组 int t[r - l + 1] int i = l, j = mid + 1, k = 0; while(i <= mid && j <= r) //中间连接符用的是&&,也就是说重要不符合其中一个条件就跳出循环 { if (a[i] > a[j]) { t[k++] = a[j++]; cnt = cnt + (mid - i + 1); //求逆序对数 } else t[k++] = a[i++]; } while(i <= mid) t[k++] = a[i++];//跳出循环后,若是在(l,mid)数组内还有未比较到的数字,说明这些数字都大于之前那些比较过的数字, 则直接放在数列的后边 while(j <= r) t[k++] = a[j++]; for (k = 0, i = l; i <= r ; k++, i++) a[i] = t[k]; //将最终排好序的数组再由t重新赋给a数组}void Msort(int a[], int l, int r){ if (l < r) { int mid = (l + r) / 2; Msort(a, l, mid); Msort(a, mid + 1, r); Merge(a, l, mid, r); //每当两个被分割好的数组进来归并,就用归并好的这两个小数组的数替换原来的数字,纸质全部替换完,归并排序结束 }}int main(){ int n,i,a[100005]; cin>>n; for(i = 0;i <= n - 1;i++) { cin>>a[i]; } Msort(a,0,n - 1); cout<<cnt<<endl; return 0;}
阅读全文
0 0
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- SDUT3402数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- SDUTACM 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- OJ3402数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- SDUT3402数据结构实验之排序五:归并求逆序数
- 图像平均操作为什么能降噪
- scrapy爬知乎返回500
- centos 7.0 firewalld防火墙常用操作
- 《单核工作法图解》阅读笔记
- Qt 非模态对话框exec()与模态对话框show()
- 数据结构实验之排序五:归并求逆序数
- java打印和重写toString
- @Autowired @Resource @Qualifier的区别
- 为什么 Android 要采用 Binder 作为 IPC 机制?
- RunTime.getRunTime().addShutdownHook用法
- 深入浅出理解视频编码H264结构(内涵福利)
- numpy: np.c_
- 数据结构实验之查找七:线性之哈希表
- TVTK 管线