1.comp函数可以这么写
bool cmp(int a,int b)
{
if(s[a]==s[b])return k[a]<k[b];//成绩相等比编号
return s[a]>s[b];否则比成绩
}
定义一个全局数组,comp可以不传递这个数组为参数而对其排序
--P1068 [NOIP2009 普及组] 分数线划定 题解
2.可以在结构体中重载<符号;
这样就不用写比较函数了,algorithm库中merge函数可以将两个已排序的数组合并,并且归并排序输入敏感,在排序度比较好的情况下时间复杂度比快速排序快很多;
3.归并排序快速计算逆序对,递归的思想
void msort(int lo,int hi)
{
if (hi-lo<2)return;
int i = lo, mid = (lo+hi) / 2, j = mid,k=lo;
msort(lo, mid);
msort(mid, hi);
while (i < mid && j < hi)
{
if (a[i] <= a[j])
{
c[k++] = a[i++];
}
else
{
c[k++] = a[j++];
inverseNum += mid - i ;
}
}
while (i < mid)
{
c[k++] = a[i++];
}
while (j < hi)
{
c[k++] = a[j++];
}
for (int h = lo; h < hi; h++)
{
a[h] = c[h];
}
}
4.P1024 [NOIP2001 提高组] 一元三次方程求解
约定该方程存在三个不同实根(根的范围在 −100 至 100 之间),且根与根之差的绝对值 ≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后 2 位。
因为根的大小差大于1,故而可以迭代i++来解,精确到小数点后2位所以二分的长度>0.001就可以了