Neues Forum!!! http://allrounder24.phpbb8.de
  Das einzigartige Forum
allrounder


Hier findet man alles: Humor, Spiele, Musik, Infos zur Technik und Multimedia, Kunst, News, Sport, Schule, Philosophie, Politik und vieles mehr...

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe StatStatistik
ChatChat VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Sortierverfahren

Anfang   zurück   weiter   Ende
Autor Beitrag
124c4u
Registrierter Benutzer


Beiträge: 2

Hobbys: Informatik & Mathematik


New PostErstellt: 04.05.08, 18:13  Betreff: Sortierverfahren  drucken  Thema drucken  weiterempfehlen

Hier sind zwei Varianten des Binärsuch-Verfahrens,
hoffentlich hilfreich für die Klausur am 6. Mai:

/** Binärsuch-Methode von Benny
* @param Search_in Dieser Array enthält die bereits sortierten Daten
* die durchsucht werden sollen.
* @param to_Search enthält den Wert der in Search_in gesucht werden soll.
* @return Die Stelle im Array an der sich der gesuchte Wert befindet. */
public static int Quicksearch(int[] Search_in,int to_Search)
{
int curindex = (Search_in.length)/2;
// momentanes Feld im Array das überprüft wird!
int sexymama = curindex // Hilfsvariable die angibt, um wieviele
// Felder curindex verschoben werden muss!
boolean end = false; // gibt an ob die Suche fertig ist
if (sexymama % 2 == 1) { sexymama++;} // wenn die zahl ungerade ist wird sie
//um 1 erhöht damit beim Teilen keine ungenauen Werte durch Kürzen entstehen
while (end == false) // While-Schleife
{
if (Search_in[curindex] == to_Search)
{end = true;} // überprüft ob die Suche fertig ist.
if (Search_in[curindex] > to_Search)
{sexymama = sexymama / 2; curindex = curindex - (int)sexymama;}
// wenn der Wert zu groß ist wird auf die Mitte der linken Hälfte
// verschoben. Dies geschieht dadurch dass die Hilfsvariable vorher immer
// durch 2 geteilt wird. Dadurch enthält sie immer dejenigen Wert, um den
// curindex erhöht oder erniedrigt werden muss.
if (Search_in[curindex] < to_Search)
{sexymama = sexymama / 2; curindex = curindex + (int)sexymama;} // s.o.
}
return curindex;
}

/** Binärsuch-Methode von Vladimir T.
* @param z die zu suchende Zahl
* @param array der nach z zu durchsuchende Array
* @param L linker Rand des zu durchsuchenden Bereichs
* @param R rechter Rand des zu durchsuchenden Bereichs
* @return Stelle, an der z vorkommt oder -1 falls nicht */
private static int binstest(int z, int[] array, int L,int R)
{//Prüfung ob die Menge keine Elemente enthaelt
if (array.length == 0) {return -1;}
else {return bins(z,array,L,R);}
}
/** Quicksearch-Methode von Vladimit T.
* Sucht eine Zahl namens "z" in einem Array namens "array"
* wobei dieser die Mindestlänge 1 hat.
* @param z die zu suchende Zahl
* @param array der nach z zu durchsuchende Array
* @param L linker Rand des zu durchsuchenden Bereichs
* @param R rechter Rand des zu durchsuchenden Bereichs
* @return Stelle, an der z vorkommt oder -1 falls nicht */
private static int bins(int z, int[] array, int L,int R)
{//Programmcode
if (L==R) //wenn es nur ein Element gibt...
{ //...vergleiche, ob dieses Element gesucht wurde
if (z == array[L]) {return L+1;} //Stelle des gesuchten Elements
else {return -1;} //Element nicht gefunden
}
else
{ //m-Initialisierung
int m = (R+L)/2; //mittleren Wert bestimmen
if (array[m] >= z) {return bins(z,array,L,m);} //Suche, ob z links...
else {return bins(z,array,(1+m),R);} //...oder rechts von m liegt
}
}



Dateianlagen:

BinarySearchVariationen.java (3 kByte)
anzeigen - speichern
Datei wurde schon 58-mal heruntergeladen.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
vovan1

Moderator

Beiträge: 240



New PostErstellt: 04.05.08, 19:22  Betreff: Re: Sortierverfahren  drucken  weiterempfehlen

Kleine Korekture,dass von Benny hat *(Benny nimm das nicht persönlich )ein Paar Maken,
benutzt mal die von Vladimir T. oder diese aus der "Standard Java Bibliothek".

private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) {
int low = fromIndex;
int high = toIndex - 1;

while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];

if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}


Naja meine ist auch nicht schlecht xD


Was dich nicht umbringt,
Macht dich nur noch Stärker.

Proffessor.Dr.Drewer


[editiert: 04.05.08, 19:25 von vovan1]
nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
124c4u
Registrierter Benutzer


Beiträge: 2

Hobbys: Informatik & Mathematik


New PostErstellt: 05.05.08, 13:40  Betreff: Re: Sortierverfahren  drucken  weiterempfehlen

Einfach nur "Macken" behaupten ist leicht - Was genau ist bei Bennys Methode nicht korrekt?
In der Arbeit morgen zählen für solche Aufgabenstellungen auch nur konkrete Gegenbeispiele.
(Damit will ich nicht sagen, dass Bennys Weg korrekt oder gar perfekt ist, aber bevor man eine neue Methode vorschlägt sollte man wissen, was an der alten Variante verbesserungsbedürftig ist.)

Bei der Methode aus der Standardbibliothek muss man sich klar sein, was ">>>" bedeutet (nämlich ein binäres Nach-rechts-Schieben der Bits, also eine elegante Methode um schnell durch zwei zu dividieren) und wieso (anstelle einer RuntimeException oder einer -1 wie bei uns) der negative Wert -(low+1) zurückgegeben wird (diesen Grund verrate ich noch nicht).


P.S. Zum Motto von "Proffessor.Dr.Drewer": Bedeutet das, dass ein "Ungenügend" in Informatik jemanden stärker macht? ;-)



nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Layout © subBlue design