《算法导论》6、计算一个数组中逆序数的个数(C++,使用合并排序改编)
来源:互联网 发布:java里字段 编辑:程序博客网 时间:2024/05/23 11:15
#include <iostream>using namespace std;int merge(int A[], int p, int q, int r);int merge_sort(int A[], int p, int r);void main(){int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 };cout << merge_sort(a, 0, 17) << endl;system("pause");}int merge(int A[], int p, int q, int r) {int i, j, k, inversions = 0;int n1 = q - p + 1;int n2 = r - q;int *L = new int[n1];int *R = new int[n2];for (i = 0; i < n1; i++) L[i] = A[p + i];for (j = 0; j < n2; j++) R[j] = A[q + j + 1];for (i = 0, j = 0, k = p; k <= r; k++) {if (i == n1) {A[k] = R[j++];}else if (j == n2) {A[k] = L[i++];}else if (L[i] <= R[j]) {A[k] = L[i++];}else {A[k] = R[j++];inversions += n1 - i; //L比R小,计做一次逆序//这里巧妙地利用了一个前提条件,LR都是有序的}}return inversions;}int merge_sort(int A[], int p, int r) {if (p < r) {int inversions = 0;int q = (p + r) / 2;inversions += merge_sort(A, p, q);inversions += merge_sort(A, q + 1, r);inversions += merge(A, p, q, r);return inversions;}else {return 0;}}
0 0
- 《算法导论》6、计算一个数组中逆序数的个数(C++,使用合并排序改编)
- 算法导论2.4 合并排序求逆序数
- 算法导论2.4 合并排序求逆序数
- [笔记]利用归并排序计算逆序数的个数
- C语言计算一个数中1的个数
- 算法导论 归并排序解决逆序数
- 算法导论笔记之---合并排序应用之求逆序数
- 【源码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)
- 使用归并排序计算逆序对个数
- 排序:查找数组中逆序对的个数
- (应用排序算法编程7.2.2)POJ 2299 Ultra-QuickSort(使用归并排序来计算逆序对的个数)
- 计算数组中相同元素的个数,以及数组总的元素数(重复元素算一个)
- 算法 -- 计算逆序数 , significant逆序数 归并排序
- C语言--计算二进制数中1的个数(&)
- 《算法导论》3、合并排序实现(C++)
- 算法导论,合并排序,c实现。
- 【算法导论学习-011】数组中的逆序对个数(Counting inversions in an array)
- 算法导论学习1--分治法计算逆序数
- 数据库连接池
- 完美解决iOS的WebView自适应内容高度问题
- Android中对标准内核的按键映射以及按键驱动
- KVM功能概览
- POJ3250---Bad Hair Day(单调栈)
- 《算法导论》6、计算一个数组中逆序数的个数(C++,使用合并排序改编)
- 决定产品成败 | 优秀运营的6大准则
- week11---5月13日
- 诸葛分享:互联网产品用户运营的基本逻辑
- Activiti-工作流
- HihoCoder第六周:01背包问题
- javaScript中对象的克隆
- C++设计模式之——单例模式
- 大数据时代:整合营销应该如何做?