Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Suche im Array (http://www.informatikerboard.de/board/thread.php?threadid=2085)
Geschrieben von neuling96 am 20.01.2015 um 19:38:
Suche im Array
| 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:
|
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];
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);
}
}
}
}
}
|
|
keine compilerfehler und ich glaube das passt so???
Geschrieben von eulerscheZahl am 20.01.2015 um 19:44:
| 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.
Geschrieben von neuling96 am 20.01.2015 um 19:59:
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
Geschrieben von eulerscheZahl am 20.01.2015 um 20:04:
| 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);
} |
|
Geschrieben von neuling96 am 20.01.2015 um 20:13:
wow das ist kurz! und so schnell gelöst
würde ich für mein code punkt abzüge bekommen, wegen der Ineffizienz ?
Geschrieben von eulerscheZahl am 20.01.2015 um 20:14:
Keine Ahnung, ich weiß nicht, was von dir erwartet wird.
Geschrieben von neuling96 am 20.01.2015 um 20:20:
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?
Geschrieben von eulerscheZahl am 20.01.2015 um 20:23:
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.
Geschrieben von neuling96 am 20.01.2015 um 20:27:
oha kein Infostudent und so gut
wie immer vielen dank
Geschrieben von eulerscheZahl am 20.01.2015 um 20:30:
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.
Geschrieben von neuling96 am 20.01.2015 um 20:43:
nochmal wow
hast du dir programmieren selbst beigebracht?
Geschrieben von eulerscheZahl am 20.01.2015 um 20:47:
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).
Geschrieben von neuling96 am 21.01.2015 um 15:57:
| 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 ?
Geschrieben von eulerscheZahl am 21.01.2015 um 16:04:
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.
Geschrieben von neuling96 am 21.01.2015 um 16:18:
ja danke
Forensoftware: Burning Board, entwickelt von WoltLab GmbH