Hallo Leute ich habe ein Problem ich will einen Wikipedia Quellcode einer binären Suche anpassen auf meinen Quelltext, allerdings gibt er als Ergeibnis immer nur -1 raus, also so als ob JEDE Zahl nicht in meinem Array mischmasch liegen würde. Wo liegt also hier der Fehler im der SucheRekursiv Methode...
Java:
public class Sortierarray {
protected static int [] mischmasch;
protected int vergleiche, vertausche;
public Sortierarray (int zahl)
{
vergleiche = 0;
vertausche =0;
mischmasch = new int[100];
if (zahl == 0)
{
for(int i = 0;i<mischmasch.length;i++)
{
mischmasch[i]=i;
}
}
else {
if(zahl == 1){
for (int i = mischmasch.length-1;i>=0;i--)
{
mischmasch[(mischmasch.length-i-1)]=i;
}
}
else
{
for (int i = 0; i<mischmasch.length;i++)
{
if(i%2==0){
mischmasch[i]=i;
}
else
{
mischmasch[i]= mischmasch.length-i;
}
}
}
}
}
public void selectionSort()
{
for(int i = 0; i < mischmasch.length; i++)
{
int b = findeMin(i);
tausche(i,b);
}
}
public void swap(int a, int b)
{
int hilf = mischmasch[a];
mischmasch[a]=mischmasch[b];
mischmasch[b]= hilf;
vertausche++;
}
public void ausgabe()
{
for (int i = 0; i < mischmasch.length;i++)
{
System.out.print(mischmasch[i]+"|");
}
}
public void QuickSort(int start, int ende)
{
if(start >= ende)
return;
//int pivot = array[start+(int)((Math.random()*100)%(ende-start+1))];
//int pivot = array[ende];
int tief, mitte, hoch;
tief = mischmasch[start];
hoch = mischmasch[ende];
mitte = mischmasch[(start + ende) /2];
if(mitte > tief && mitte > hoch)
mitte = (hoch > tief ? hoch : tief); //hoch = boolean ( true = hoch ausgewertet, false = tief ausgewertet)
else if(mitte < tief && mitte < hoch)
mitte = (hoch < tief ? hoch : tief);
int pivot = mitte;
int i = start;
int j = ende;
do{
while(i<ende && mischmasch[i]<pivot){
i++;
}
while(j>=start && mischmasch[j]>pivot){
j--;
}
vergleiche +=5;
if(i<=j)
{
tausche(i, j);
j--;
i++;
}
}while(i <= j);
QuickSort(start, j);
QuickSort(i, ende);
}
public static int sucheRekursiv(int start, int ende, int eingabeZeichen) {
int indexAnfang = 0, indexEnde = 0;
start = mischmasch[indexAnfang];
ende = mischmasch[indexEnde];
// eingabeZeichen = 0;
// die Mitte zwischen Anfangs- und Endindex festlegen
int indexMitte = indexAnfang + ((indexEnde - indexAnfang) / 2);
// wenn das Zeichen mit dem Element des Mitteindexes übereinstimmt
if (mischmasch[indexMitte] == eingabeZeichen) {
// dann das zurückgeben
return indexMitte;
}
//wenn das Ende der Rekursion erfolglos erreicht wurde.
if (indexAnfang == indexMitte) {
// sonst: kein Ergebnis (Zeichen im Alphabet nicht vorhanden)
return -1;
}
// wenn Zeichen in der Mitte kleiner ist als Eingabe
if (mischmasch[indexMitte] < eingabeZeichen) {
// rekursiv die Suche noch mal aufrufen, diesmal aber mit neuem Indexanfang (1. Parameter)
return sucheRekursiv(indexMitte + 1, indexEnde, eingabeZeichen);
} else { //if (mischmasch[indexMitte] > eingabeZeichen)
// rekursiv die Suche noch mal aufrufen, diesmal aber mit neuem Indexende (2. Parameter)
return sucheRekursiv(indexAnfang, indexMitte - 1, eingabeZeichen);
}
}
public static void main (String[] args){
Sortierarray sorti = new Sortierarray(2);
sorti.bubbleSort();
sorti.ausgabe();
System.out.println();
System.out.println(sorti.sucheRekursiv(0, 0, 15));
}
}