Array mit Indizes der absteigend sortierten Elemente eines anderen Arrays?

bernd

Neues Mitglied
Mir fiel echt keine kluge kurze Beschreibung ein.

Sache ist die:
Ich habe ein handelsübliches int array.
bspw. a={2,8,4,0,5,1}

der index, der zum jeweiligen element gehört, ist wichtig.

daher will ich ein zweites int array b bauen wie folgt:
b[0] soll als element den index des allergrößten elements aus a haben.
in a ist 8 die größte zahl, diese befindet sich an indexstelle 1, daher wird
b[0]=1 gesetzt.
b[1] wird dann den index des zweitgrößten elements enthalten.
in a ist 5 das zweitgrößte element und hat den index 4, daher ist b[1]=4.
b[2] wird den index des drittgrößten elements enthalten, usw.

ich bin mir nur gerade echt unsicher wie ich auf intelligente art und weise aus gegebenem a das array b konstruiere.
ich meine, das maximum in a zu finden ist noch easy (womit ich ja nur b[0] bekomme, aber danach bin ich überfragt.

sinn des ganzen ist einfach dass ich eine menge von sachen habe, die der reihe nach erst auf das größte element der liste angewendet sollen.
falls dort nicht machbar, dann auf das zweitgrößte, usw.

eine option, die ich sehen würde, wäre vielleicht hinzugehen, maximum von a zu suchen, dessen index an der nöäcshtfreien stelle in b einzutragen, dann (ganz wichtig) in a die stelle des maximums zu überschreiben mit -5 oder so (also in obigem beispiel die 8 durch eine -5 üpberschreiben).
rinse and repeat.
dadurch das nach "abspeichern" des maximums dieses durch eine zahl ersetzt wird die viel kleiner als alle vorkommenden zahlen ist (aufgrund der sache um die es geht weiß ich dass in der ausgangslage a nur aus zahlen >=0 besteht) ist de facto die stelle des ehemaligen maximums aus dem rennen geflogen. und in obigem beispiel würde beim nächsten suchen des maximums korrekt die 5 bzw. deren index gefunden werden.

woher wissen wir dass nciht irgendwann die -5 aufgenommen wird?
weil die for schleife, die das zu befüllende b durchgeht, so gewählt ist dass sie maximal a.length elemente einfügt.
und das erste -5 würde erst als a.length+1 tes element eingefügt werden, also nie.

die idee ist sod umm, die könnte sogar funktionieren.

Hat Jemand vielleicht eine programmiertechnisch und effizienzpraktisch schönere Idee? :)
 
Bei näherem Überlegen kann ich doch nicht einfach das alte Array nach Belieben überschreibend da dessen ursprünglichen Elemente doch wichtig sind für meien weiteren Pläne :-(
 
Habe meine Vorgehensweise grunlegend geändert sodass obiges Problem nicht mehr besteht.
Habe bei der Bildung des obigen Arrays a einen Check mit eingebaut sodass bei verletzung des kriteriums an der stelle in a statt dem eigentlichenw ert eine -1 eingetragen wird.
Sodass von anfang an im arra a an den stellen, wo mein wunschkriterium nciht erfüllt wird, direkt eine -1 steht . und die stellen später von mir nicht weiter beachtet werden.

das hat den vorteil dass ich nicht mehr hingehen muss:
größte stelle suchen. erfüllt sie auch kriterium? nein. dann verwerfen.
zweitgrößte stelle suchen. erfüllt sie kriterium? nein. dann verwerfen.
drittgrößte stelle suchen. erfüllt sie kriterium? ja. die nehmen wir.

stattdessen haben all die stellen in a, die das kriterium nicht erfüllen, automatisch eine -1 drinstehen.
Da alle "natürlich vorkommenden" zahlen und elemente >0 sind, wird also bei der suche nach dem maximum eine stelle gefunden, die 1. eben das maximum aller elemente ist (wohlgemerkt: die "ungültigen" stellen haben -1 und sind daher im array die kleinsten elemente)
und 2. eben auch das kriterium erfüllt.

einziger sonderfall wäre wenn als maximum eine stelle mit -1 gefunden worden wäre.
dies hieße dann dass das ganze array nur aus -1en besteht.
ergo dass im kompletten array keine einzige gültige stelle vorkommt.
dies lässt sich ja aber mit einem einfachen if(max(array)<) rausfiltern und separat bearbeiten :)
 
ich habe das Gefühl, dass du nach Sortieralgorithmen schauen solltest. Da am besten nach Algorithmen, die nicht inplace arbeiten (es wird also ein zweites Array erstellt)
 
Zurück
Oben Unten