Sorting algorithms/Cocktail sort: Difference between revisions

Content added Content deleted
m (Bug fix)
m (Minor edit)
Line 545: Line 545:
if (end == begin)
if (end == begin)
return;
return;
for (end -= size; ; ) {
bool swapped = true;
bool swapped = false;
for (end -= size; swapped; ) {
swapped = false;
for (char* p = begin; p < end; p += size) {
for (char* p = begin; p < end; p += size) {
char* q = p + size;
char* q = p + size;
Line 552: Line 553:
swap(p, q, size);
swap(p, q, size);
swapped = true;
swapped = true;
}
}
if (swapped) {
swapped = false;
for (char* p = end; p > begin; p -= size) {
char* q = p - size;
if (cmp(q, p) > 0) {
swap(p, q, size);
swapped = true;
}
}
}
}
}
if (!swapped)
if (!swapped)
break;
break;
swapped = false;
for (char* p = end; p > begin; p -= size) {
char* q = p - size;
if (cmp(q, p) > 0) {
swap(p, q, size);
swapped = true;
}
}
}
}
}
}