Home > Back-end >  In a recent upgrade difference algorithm, qsufsort is not very good, have a great god can help see u
In a recent upgrade difference algorithm, qsufsort is not very good, have a great god can help see u

Time:10-30

 
The static void split (off_t * I, off_t * V, off_t start, off_t len, off_t h)
{
Off_t I, j, k, x, TMP, jj, kk.

If (len <16) {
For (k=start; K J=1; X=V [I [k] + h];
for(i=1; K + I If (V [I [k +] I + h] {
J=0;
};
If (V [I] [k +] I + h==x) {
TMP=I [k + j]; I [k + j]=[k +] I I; I [k +] I=TMP;
j++;
};
};
for(i=0; I If I (j==1) [k]=1;
};
return;
};

X=V [I [start + len/2) + h];
Jj=0; Kk=0;
For (I=start; I If (V [I] [I] + h (x) jj++;
If (V [I] [I] + h==x) kk++;
};
Jj +=start; Kk +=jj;

I=start; J=0; k=0;
While (I If (V [I [I] + h] {
} else if (V [I] [I] + h==x) {
TMP=I [I]; [I] I=I + j] [jj; I [jj + j]=TMP;
j++;
} else {
TMP=I [I]; I [I]=[kk + k] I; I [kk + k]=TMP;
k++;
};
};

While (jj + j If (V [I] [jj + j] + h==x) {
j++;
} else {
TMP=I + j] [jj; I [jj + j]=[kk + k] I; I [kk + k]=TMP;
k++;
};
};

If (jj> start) split (I, V, start, jj - start, h);

for(i=0; I If (==jj kk - 1) I [jj]=1;

If (start + len> kk) split (I, V, kk, start + len - kk, h);
}

The static void qsufsort (off_t * I, off_t * V, old u_char * and off_t oldsize)
{
Off_t buckets [256].
Off_t I, h, len;

for(i=0; I <256; I++) buckets [I]=0;
for(i=0; I for(i=1; I <256; I++) buckets [I] +=buckets [I - 1);
For (I=255; i>0; I -) buckets [I]=buckets [I - 1);
Buckets [0]=0;

for(i=0; I I [0]=oldsize;
for(i=0; I V [oldsize]=0;
for(i=1; I <256; I++) if (buckets [I]==buckets] [I - 1 + 1) I [buckets [I]]=1;
I [0]=1;

For (h=1; I [0]!=- (oldsize + 1); H + h)={
Len=0;
for(i=0; I If (I <0 [I]) {
Len -=I [I];
I -=I [I];
} else {
If (len) I [I - len]=- len;
Len=V [I [I]] + 1 - I;
The split (I, V, I, len, h);
I +=len;
Len=0;
};
};
If (len) I [I - len]=- len;
};

for(i=0; I }
  • Related