Chciałem napisać sortowanie leksykograficzne oparte na quicksorcie, ale nie działa ono do konca prawidłowo. Szukam błędu ale nie mogę znaleźć.
std::map<char, int> sign;
sign['A'] = 1; sign['a'] = 1;
sign['Ą'] = 2; sign['ą'] = 2;
sign['B'] = 3; sign['b'] = 3;
sign['C'] = 4; sign['c'] = 4;
sign['Ć'] = 5; sign['ć'] = 5;
sign['D'] = 6; sign['d'] = 6;
sign['E'] = 7; sign['e'] = 7;
sign['Ę'] = 8; sign['ę'] = 8;
sign['F'] = 9; sign['f'] = 9;
sign['G'] = 10; sign['g'] = 10;
sign['H'] = 11; sign['h'] = 11;
sign['I'] = 12; sign['i'] = 12;
sign['J'] = 13; sign['j'] = 13;
sign['K'] = 14; sign['k'] = 14;
sign['L'] = 15; sign['l'] = 15;
sign['Ł'] = 16; sign['ł'] = 16;
sign['M'] = 17; sign['m'] = 17;
sign['N'] = 18; sign['n'] = 18;
sign['Ń'] = 19; sign['ń'] = 19;
sign['O'] = 20; sign['o'] = 20;
sign['Ó'] = 21; sign['ó'] = 21;
sign['P'] = 22; sign['p'] = 22;
sign['Q'] = 23; sign['q'] = 23;
sign['R'] = 24; sign['r'] = 24;
sign['S'] = 25; sign['s'] = 25;
sign['Ś'] = 26; sign['ś'] = 26;
sign['T'] = 27; sign['t'] = 27;
sign['U'] = 28; sign['u'] = 28;
sign['V'] = 29; sign['v'] = 29;
sign['W'] = 30; sign['e'] = 30;
sign['X'] = 31; sign['x'] = 31;
sign['Y'] = 32; sign['y'] = 32;
sign['Z'] = 33; sign['z'] = 33;
sign['Ż'] = 34; sign['ż'] = 34;
sign['Ź'] = 35; sign['ź'] = 35;
int cmpWord(String a, String b) {
//1 = a>b
//0 = a=b
//-1 = a<b
int l[2];
int i, k;
l[0] = a.Length();
l[1] = b.Length();
k = 0;
if(l[1]>l[0])
k = 1;
for(int i = 0; i < l[k]; i++) {
char z1, z2;
z1 = a[i+1];
z2 = b[i+1];
if(sign[z1] < sign[z2]) {
return 1;
} else if(sign[z1] > sign[z2]) {
return -1;
} else if(sign[z1] == sign[z2] && i == l[k]) {
return 0;
}
}
return 0;
}
int quickSort(int left, int right) {
int i=left;
int j=right;
String x = this->rankVector[(left+right)/2]->getName();
do {
while(this->cmpWord(x, this->rankVector[i]->getName())) i++;
while(this->cmpWord(this->rankVector[i]->getName(), x)) j--;
if(i<=j) {
rank* temp = this->rankVector[i];
this->rankVector[i] = this->rankVector[j];
this->rankVector[j] = temp;
i++;
j--;
}
}while(i<=j);
if(left<j) quickSort(left, j);
if(right>i) quickSort(i, right);
return 0;
}
</b>