刚刚做个离散化的题呢 手打快排(我不会说是我不会用sort的) 结果发现出了点问题
虽然我的这个快排和网上的很大不同 网上的看起来还更加厉害 但......太懒了不想学 这个多好~
于是移至某谷的快排模板题 手打了一下 结果......
Pascal记录:
https://www.luogu.org/record/show?rid=8116157
https://www.luogu.org/record/show?rid=8116211
终于...
https://www.luogu.org/record/show?rid=8116231
于是发现了几个大问题
Pascal的 这个快排打法 完全是固定的啊=-=
于是放个C++代码记录一下 防止以后搞错
void kp(int a,int b)
{
int x = a,y = b,mid = i[(x + y) >> 1];
while (x <= y)
{
while (i[x] < mid) ++x;
while (i[y] > mid) --y;
if (x <= y)
{
swap(i[x],i[y]);
swap(j[x],j[y]);
++x;
--y;
}
}
if (x < b) kp(x,b);
if (a < y) kp(a,y);
}
外面while 必须是 < 不能是<=
里面while 则不加等于 因为数值相同 换了和没换 等价(而且换了的话 一些需要换回来的题目的数据还会乱)
里面判断 为防止 x==y 时 死循环 要判断<=
进入子循环时 两数等于就不用了(原本就不用)
盖余之快排且码如此~