![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
ComBoat
俺好菜呀o(╥﹏╥)o
展开
-
OpenJudge 7622 求排列的逆序数
描述在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务。对于不同的排名结果可以用逆序来评价它们之间的差异。考虑1,2,…,n的排列i1,i2,…,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序。一个排列含有逆序的个数称为这个排列的逆序数。例如排列 263451 含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(原创 2021-02-09 16:48:33 · 267 阅读 · 0 评论 -
OpenJudge 7617 输出前k大的数
描述给定一个数组,统计前k大的数并且把这k个数从大到小输出。输入第一行包含一个整数n,表示数组的大小。n < 100000。第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。第三行包含一个整数k。k < n。输出从大到小输出前k大的数,每个数一行。样例输入104 5 6 9 8 7 1 2 3 05样例输出98765思路直接排序的话,时间复杂度是O(nlogn),可以优化一下,只给前k大的数排序。那么就先要原创 2021-02-09 09:49:55 · 183 阅读 · 0 评论 -
快速排序
从待排数组中选出一个数,将小于它的放到一边,大于它的放到另一边,再对这两边分别进行快速排序,持续递归,直到排序的只剩一个元素时间复杂度O(nlogn)单向扫描 #include<iostream>using namespace std; int partition(int *a,int l,int r){ int pivot=a[l]; int left=l+1; int right=r; while(left<=right) { if(a[left]<=原创 2021-02-08 18:41:17 · 71 阅读 · 0 评论 -
归并排序
先将前半部分排序,再将后半部分排序,最后将两部分合并递归实现,直到一部分只有一个元素时间复杂度O(nlogn)代码#include<iostream>using namespace std;int temp[100];void merge(int *a,int left,int mid,int right){ for(int i=left;i<=right;i++) temp[i]=a[i]; //先将a整体赋给temp int l=left,r=原创 2021-02-08 18:03:40 · 96 阅读 · 1 评论