c语言归并排序(poj2299)《学习记录》
2015-07-22 20:44
477 查看
个人感觉和快排有些类似之处poj2388,这个题是找逆序队
#include <stdio.h> #include <stdlib.h> #define MAX 500001 int n, a[MAX], t[MAX]; __int64 sum; void wp(int l, int m, int r) { int p = 0;//计数,复制的时候 int i = l, j = m + 1; while(i <= m && j <= r)//左右两个数组都有数 { if (a[i] > a[j]) { t[p++] = a[j++]; sum+= m - i + 1;//序队可加 } else { t[p++] = a[i++]; } } while(i <= m) t[p++] = a[i++]; while(j <= r) t[p++] = a[j++]; for (i = 0; i < p; i++) { a[l + i] = t[i];//把结果还原到原来的数组 } } void Sort(int l, int r) { int m; if (l < r) { m = (l + r) / 2; Sort(l, m); Sort(m + 1, r); wp(l, m, r); } } int main() { int i; while(1) { scanf("%d", &n); if (n == 0) break; sum=0; for(i = 0; i < n; i++) { scanf("%d", &a[i]); } Sort(0, n - 1); printf("%I64d\n", sum); } //system("pause"); return 0; }
相关文章推荐
- 文件遍历排序函数
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- C#实现Datatable排序的方法
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法