Die letzten 10 Beiträge |
eulerscheZahl |
Nein, das was ich geschrieben habe, ist keine binäre Suche. Ich wollte dir nur zeigen, wie du das Kopieren des Array vermeiden kannst.
Sieht gut aus, wie du die Unterscheidung des zu durchsuchenden Intervalls eingebaut hast. |
neuling96 |
. Falls nein, wird die Suche auf der
vorderen Halfte (falls der Suchwert kleiner ist) oder hinteren Halfte des Arrays wiederholt.
wenn ich dein code geanu ansehe, dann läuft es nicht nach diesen schema, oder ??
, aber ich bin mir nicht sicher
ich hab versucht dein code um zuschreiben
public class Suche {
private static boolean suchebinaer(int a, int[] array, int start, int end) {
if (start >= end) {
return array[start] == a;
}else{
int mitte = (start + end) / 2;
if (array[mitte] == a) {
return true;
}else{
if (array[mitte] > a){
return suchebinaer(a, array, start, mitte - 1);
}else{
return suchebinaer(a, array, mitte + 1, end);
}
}
}
}
public static boolean suchebinaer(int a, int[] array) {
if (array.length == 0) {
return false;
}else{
return suchebinaer(a, array, 0, array.length - 1);
}
}
} |
eulerscheZahl |
Ja. |
neuling96 |
Zitat: |
Original von neuling96
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);
}
}
}
}
}
|
|
l |
würdet man diesen code als rekursiv bezeichnen?
ich mein es "ruft" sich doch selbst wieder auf?
, also ja ? |
neuling96 |
ja danke
|
eulerscheZahl |
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. |
neuling96 |
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:
|
eulerscheZahl |
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). |
neuling96 |
nochmal wow
hast du dir programmieren selbst beigebracht? |
eulerscheZahl |
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. |
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |
|
|