Falls Du keinen weiteren Speicherplatz zur Verfügung hast:
Zwei Schleifen mit Indices i,j, i!=j:
a(i)==a(j) => mehrfaches Vorkommen
(hat aber O(n*n) Rechenaufwand, ist also nicht rechenoptimal, aber
speicheroptimal!)
sonst:
"erzeuge" zweites Array B mit gleicher Anzahl Elemente wie Dein
Array A, aber speichere in dieses die Indices von 0..n-1
Fasse nun die Elemente von Array A und B zusammen: (a,i), wobei a
aus A, i aus B ist
Definiere Grösser-Operator:
(a1,i1) > (a2,i2) falls (a1 > a2) oder (a1 == a2 und i1 > i2)
Sortiere nun die so zusammengefassten Elemente mittels
Grösser-Operator
Dann musst Du nur noch durch das Array laufen und testen, ob
benachbarte Elemente (a1,i1),(a2,i2) mit a1==a2 existieren
=> mehrfaches Vorkommen!!!
Falls Du die ursprüngliche Reihenfolge wieder herstellen möchtest:
die steht im Array B in Form der Indices
(hat O(n*log(n)) Rechenaufwand, ist also rechenoptimal, aber
diesmal NICHT speicheroptimal!)