如何运用归并排序快速求得逆序对数目
来源:互联网 发布:集团公司网络规划 编辑:程序博客网 时间:2024/05/16 11:48
逆序对数目可以直接穷举,但效率很低,O(n^2)级别.
可以用树状数组写.
这里介绍运用归并排序来求逆序对数目.
归并排序过程中,针对两个内部有序的串,
实现插入排序,即两串开头的元素,小的进入目标串,直到所有元素都输出.
假设左串当前元素比右串当前元素大.
那么左串剩下的元素一定都比右串当前元素大,都是逆序对.
那么这里逆序对就有 (mid - index_left + 1 )对
累加,最后获得最终的逆序对数目.
给出代码实现:
// a:目标数组 temp:临时数组void merge(int left,int right,int mid){ int index1, index2, num = left; for(int i=left;i<=right;i++) temp[i] = a[i]; index1 = left; index2 = mid+1;//左右子序列开始的位置 while(index1<=mid && index2<=right) { if(temp[index1] <= temp[index2])//取较小者放入数组 { a[num++] = temp[index1++]; } else { a[num++] = temp[index2++]; res += (mid-index1+1);//左边没比完的元素和右边这个元素构成逆序对。 } } while(index1 <= mid) a[num++] = temp[index1++]; while(index2 <= right) a[num++] = temp[index2++];}void sort(int left,int right){ if(left >= right) return; int mid = (left+right)/2; sort(left,mid); sort(mid+1,right); merge(left,right,mid);}
1 0
- 如何运用归并排序快速求得逆序对数目
- 归并排序求逆序对数目
- 归并排序计算逆序对数目
- 归并排序 SHUOJ 1811 A20-逆序对数目 解题报告
- 从归并排序到逆序对数目计算。
- 逆序对 归并排序
- 归并排序 & 逆序对
- 归并排序--逆序对
- 归并排序&归并排序求逆序对
- 计算逆序数:在归并和快排两种排序过程中求得逆序数的方法比较
- 归并排序求逆序对
- 【归并排序】【逆序对】序列
- 归并排序与逆序对
- 归并排序求逆序对
- 归并排序求逆序对~~~
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 10.字符设备驱动模型(2)-字符设备驱动模型
- opencv最小包络三角形
- TensorFlow基本用法
- 社交网络 (并查集的应用)
- 促销活动 (优先队列的应用)
- 如何运用归并排序快速求得逆序对数目
- GitHub的一个日志打印库LazyLogger
- Android经典面试题
- bootstrap 图标glyphicons图标符号不正常显示解决办法
- PROJEC LOG 2- VISUALIZATION
- javascript数组和字符串的常见用法
- indexOf()在字符串进行检索
- 特征选择方法之信息增益
- 8086汇编初学之贪吃蛇