Suche im Array |
|
code: |
1:
|
suchebinaer(3, new int[] { 1, 2, 3, 7, 9, 13 }) |
|
liefert mir false, obwohl da eine 3 drin ist.
Die Idee, das Array für den Methodenaufruf zu kopieren, gefällt mir nicht (denke an den Speicher, der da unnötig belegt wird, das macht das Programm unnötig langsam. Übergebe lieber das ganze Array sowie Start und Ende des Suchintervalls.
__________________ Syntax Highlighting fürs Board (Link)
|
|
20.01.2015 19:44 |
|
|
neuling96 unregistriert
|
|
ich sehe den einen fall habe ich nicht betratet
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
|
public class Suche {
public static boolean suchebinaer(int a, int [] array){
if(array.length==1 && a != array[0]) {
return false;
}else {
int m= array.length/2;
if(array[m]==a){
return true;
}else {
if(array[m]>=a){
int[]arrayx=new int [m+1];
for(int i=0; i<=m; i++){
arrayx[i]=array[i];
}
return suchebinaer(a, arrayx);
}else {
int[]arrayx=new int [m];
for(int i=0; i<m; i++){
arrayx[i]=array[i+m];
}
return suchebinaer(a, arrayx);
}
}
}
}
}
|
|
"Übergebe lieber das ganze Array sowie Start und Ende des Suchintervalls"
ich weiß nicht wie ich es umsetzten soll
|
|
20.01.2015 19:59 |
|
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
private static boolean suchebinaer(int a, int[] array, int start, int end) {
int mitte = (start + end) / 2;
return array[mitte] == a || suchebinaer(a, array, start, mitte - 1)
|| suchebinaer(a, array, mitte + 1, end);
}
public static boolean suchebinaer(int a, int[] array) {
if (array.length == 0) {
return false;
}
return suchebinaer(a, array, 0, array.length - 1);
} |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
20.01.2015 20:04 |
|
|
neuling96 unregistriert
|
|
wow das ist kurz! und so schnell gelöst
würde ich für mein code punkt abzüge bekommen, wegen der Ineffizienz ?
|
|
20.01.2015 20:13 |
|
|
neuling96 unregistriert
|
|
ich auch nicht
die uni sieht nicht vor weiter in java zu vertiefen!
Es wird noch Hoare-Kalkül und Datenstrukturen eingeführt und das wars dann mit java.
kannst du Themen empfehlen, die ich unbedingt behandelt haben soll?
|
|
20.01.2015 20:20 |
|
|
|
Zum einen ist das von Uni zu Uni verschieden, zum anderen bin ich glaube ich nicht qualifiziert, das zu beantworten, ich studiere nicht einmal Informatik. Wirf einfach einen Blick ins Modulhandbuch, da steht doch drin, was alles behandelt wird.
__________________ Syntax Highlighting fürs Board (Link)
|
|
20.01.2015 20:23 |
|
|
neuling96 unregistriert
|
|
oha kein Infostudent und so gut
wie immer vielen dank
|
|
20.01.2015 20:27 |
|
|
|
Nur beim Programmieren. Ich studiere Elektro-und Informationstechnik. Da lerne ich zwar auch Programmieren, boolsche Algebra und so. Aber im theoretischen Bereich sieht es nicht so gut aus, das Hoare-Kalkül sagt mir nur vom Namen her etwas.
__________________ Syntax Highlighting fürs Board (Link)
|
|
20.01.2015 20:30 |
|
|
neuling96 unregistriert
|
|
nochmal wow
hast du dir programmieren selbst beigebracht?
|
|
20.01.2015 20:43 |
|
|
|
Im Studium hatte ich bereits 2 Semester C und eins C++, zur Zeit noch Java.
In der Schule man ein wenig Delphi (die Sprache ist zwar objektorientiert, aber wir kamen noch nichtmal bis zu Funktionen, haben alles in die main geschrieben.
Ich habe mich dann selbst weiter damit beschäftigt und mir auch C# beigebracht. Mit den beiden Sprachen programmiere ich auch in der Arbeit (Delphi nur, um alten Code zu reparieren).
__________________ Syntax Highlighting fürs Board (Link)
|
|
20.01.2015 20:47 |
|
|
neuling96 unregistriert
|
|
Zitat: |
Original von eulerscheZahl
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
private static boolean suchebinaer(int a, int[] array, int start, int end) {
int mitte = (start + end) / 2;
return array[mitte] == a || suchebinaer(a, array, start, mitte - 1)
|| suchebinaer(a, array, mitte + 1, end);
}
public static boolean suchebinaer(int a, int[] array) {
if (array.length == 0) {
return false;
}
return suchebinaer(a, array, 0, array.length - 1);
} |
|
|
für (5, new int[] { 1, 2,3, 7, 13 }))
liefert ?
neuling96 hat dieses Bild (verkleinerte Version) angehängt:
|
|
21.01.2015 15:57 |
|
|
|
Da habe ich die Abbruchbedinung verbockt.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
private static boolean suchebinaer(int a, int[] array, int start, int end) {
if (start >= end) {
return array[start] == a;
}
int mitte = (start + end) / 2;
return array[mitte] == a
|| suchebinaer(a, array, start, mitte - 1)
|| suchebinaer(a, array, mitte + 1, end);
} |
|
sollte jetzt passen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2015 16:04 |
|
|
neuling96 unregistriert
|
|
ja danke
|
|
21.01.2015 16:18 |
|
|
|