Zahlen ohne Verwendung von logischen Operatoren sortieren?!
-
das ist nicht immer richtig richtig: wenn z.b. a<0 und b>0 und a-b zum überlauf führen würde, dann würde trotzdem a als maximum zurückgegeben werden, wenn der mögliche wertebereich kleiner ist, kann man es nat. so machen - auf assembler ebene geht es im übrigen einfacher (ab pentium pro - maximum):
inline int Maximum(const int a, const int b) { __asm { mov eax, a cmp eax, b cmovl eax, b }
da es sich um keinen sprung handelt, muss im falle falscher vorhersage nicht die ganze pipeline gelöscht werden, lediglich alle ergebnisse die auf dem cmov beruhen müssen verworfen werden; insofern ist diese variante sehr schnell, insbes. wenn das ergebnis nicht gleich im nächsten befehl benötigt wird.
im übrigen bin ich nicht sicher ob das überhaupt portabel ist: nähmlich das shift auf jeder maschine arihmetisch und nicht logisch arbeitet (bei logisch könnte man & mit * ersetzen). jemand mit ahnung vom standard kann das sicher besser beurteilen.@MaSTaH: wieso ich? war doch nicht meine idee
klar, beim bubblesort braucht man ja irgendwie eine abbruchbedingung, insofern ist dann wenigstens einmal ein logischer ausdruck notwendig (oder man nimmt immer die maximale anzahl von durchläufen: bei n elementen (n-1)(n-2)/2 lol)