Rekursives Suchen Blue J

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rekursives Suchen Blue J

    Ich hab grade gesehen, dass die Aufgabe mit der Literaturliste die falsche Aufgabe ist stattdessen ist das meine Aufgabe...

    Dafür fehlen mir noch das Sortieren und die abschaltbaren Methoden...Kann wer helfen?

    Geben Sie rekursive Lösungen für die binäre Suche in einem Array (bzw. in einer Objekt-
    Sammlung) sowie für das Sortieren durch Auswahl in einem Array (in einer
    Objektsammlung) an. Fügen Sie abschaltbare Ausgaben hinzu, die die Arbeitsweise der
    Methoden verdeutlichen.
  • Hier mal meine bisherige Lösung...

    Quellcode

    1. public class BinaereSuche {
    2. // Attribute
    3. int[] feld; // speichert das zu durchsuchende Array
    4. int l; // linke Grenze des Suchbereichs
    5. int r; // rechte Grenze des Suchbereichs
    6. int m; // Mitte
    7. int s; // das zu suchende Element
    8. // Konstruktor
    9. public BinaereSuche(int[] feld) {
    10. this.feld = feld;
    11. s = l = r = m = 0;
    12. }
    13. // startet die rekursive Suche
    14. // führt Initialisierungsarbeiten aus
    15. public int sucheRekursiv(int s) {
    16. // Array null oder leer?
    17. if (feld == null || feld.length == 0)
    18. return -1; // Fehlerwert zurückgeben
    19. // Variablen initialisieren
    20. l = 0;
    21. r = feld.length - 1;
    22. this.s = s;
    23. // startet die eigentliche Rekursion
    24. return binaerRek();
    25. }
    26. // prüft rekursiv, ob ein bestimmtes Element im
    27. // Array vorhanden ist und gibt den Index der Position
    28. // des gefundenen Elements zurück
    29. public int binaerRek() {
    30. m = (l + r) / 2; // Berechnung der Mitte
    31. print(); // Ausgabe des Status auf der Konsole
    32. // Abbruchbedingung (Rekursionsbasis)
    33. if (l > r)
    34. return -1;
    35. // suche s im linken Teilfeld
    36. if (s < feld[m]) {
    37. r = m - 1;
    38. return binaerRek();
    39. }
    40. // suche s im rechten Teilfeld
    41. else if (s > feld[m]) {
    42. l = m + 1;
    43. return binaerRek();
    44. }
    45. // s wurde an Position m gefunden
    46. else
    47. return m;
    48. }
    49. // gibt den aktuellen Status der Suche auf
    50. // der Konsole aus
    51. public void print() {
    52. // gibt zuerst den Inhalt des Arrays aus
    53. for (int i = 0; i < feld.length; i++)
    54. System.out.print(feld[i] + " ");
    55. System.out.println();
    56. // zeigt die Positionen der einzelnen "Zeiger"
    57. // innerhalb des Arrays an
    58. for (int i = 0; i < feld.length; i++) {
    59. if (i == m)
    60. System.out.print("m");
    61. else if (i == l)
    62. System.out.print("l");
    63. else if (i == r)
    64. System.out.print("r");
    65. else
    66. System.out.print(" ");
    67. System.out.print(" ");
    68. }
    69. // zusätzliche Leerzeilen ausgeben
    70. System.out.println('\n');
    71. }
    72. // testet die Funktionen der Klasse
    73. public static void main(String[] args) {
    74. int[] a = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 199 };
    75. BinaereSuche b = new BinaereSuche(a);
    76. int w = b.sucheRekursiv(5);
    77. System.out.println(w);
    78. }
    79. }
    Alles anzeigen
  • fincky87 schrieb:

    fehlen mir die abschaltbaren Methoden

    Nicht Methoden - "Ausgaben"

    Quellcode

    1. public class BinaereSuche
    2. {
    3. public boolean debug = false;
    4. ...
    5. public int binaerRek() {
    6. ...
    7. if(debug) print(); //Ausgabe des Status auf der Konsole
    8. ...
    9. }
    10. public static void main(String[] args) {
    11. int[] a = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 199};
    12. BinaereSuche b = new BinaereSuche(a);
    13. b.debug = true;
    14. ...
    15. }
    Alles anzeigen


    fincky87 schrieb:

    Außerdem weiß ich nicht wie das sortieren aussehen soll. Konkret in diesem Beispiel.

    Ich weiß nicht, was ich dir mehr erzählen kann, als die Wikipedia. Die Lösung der Wikipedia ist zwar in Python geschrieben, verwendet aber keine Python Sprachfeatures und sollte somit 1:1 in Java übernommen werden können.
  • D0nut kannst du mir da wirklich nicht helfen...Ich hab echt keinen Plan davon und mein Teampartner kommt nicht mehr online. Ich bräuchte das zu morgen. Ich wäre dir unendlich dankbar. Sollte doch für dich ne Kleinigkeit sein... das ganze hier zu posten. mit der wiki rekursiven suchmethode und der methode.
  • Ne, dein rekursives Sortieren, schreib ich dir wirklich nicht um. Da hättest du dich vorher selbst drum kümmern müssen.

    Hier die Änderung des Debug Flags:

    Quellcode

    1. public class BinaereSuche {
    2. public boolean debug = false;
    3. // Attribute
    4. int[] feld; // speichert das zu durchsuchende Array
    5. int l; // linke Grenze des Suchbereichs
    6. int r; // rechte Grenze des Suchbereichs
    7. int m; // Mitte
    8. int s; // das zu suchende Element
    9. // Konstruktor
    10. public BinaereSuche(int[] feld) {
    11. this.feld = feld;
    12. s = l = r = m = 0;
    13. }
    14. // startet die rekursive Suche
    15. // führt Initialisierungsarbeiten aus
    16. public int sucheRekursiv(int s) {
    17. // Array null oder leer?
    18. if (feld == null || feld.length == 0)
    19. return -1; // Fehlerwert zurückgeben
    20. // Variablen initialisieren
    21. l = 0;
    22. r = feld.length - 1;
    23. this.s = s;
    24. // startet die eigentliche Rekursion
    25. return binaerRek();
    26. }
    27. // prüft rekursiv, ob ein bestimmtes Element im
    28. // Array vorhanden ist und gibt den Index der Position
    29. // des gefundenen Elements zurück
    30. public int binaerRek() {
    31. m = (l + r) / 2; // Berechnung der Mitte
    32. if(debug) print(); //Ausgabe des Status auf der Konsole
    33. // Abbruchbedingung (Rekursionsbasis)
    34. if (l > r)
    35. return -1;
    36. // suche s im linken Teilfeld
    37. if (s < feld[m]) {
    38. r = m - 1;
    39. return binaerRek();
    40. }
    41. // suche s im rechten Teilfeld
    42. else if (s > feld[m]) {
    43. l = m + 1;
    44. return binaerRek();
    45. }
    46. // s wurde an Position m gefunden
    47. else
    48. return m;
    49. }
    50. // gibt den aktuellen Status der Suche auf
    51. // der Konsole aus
    52. public void print() {
    53. // gibt zuerst den Inhalt des Arrays aus
    54. for (int i = 0; i < feld.length; i++)
    55. System.out.print(feld[i] + " ");
    56. System.out.println();
    57. // zeigt die Positionen der einzelnen "Zeiger"
    58. // innerhalb des Arrays an
    59. for (int i = 0; i < feld.length; i++) {
    60. if (i == m)
    61. System.out.print("m");
    62. else if (i == l)
    63. System.out.print("l");
    64. else if (i == r)
    65. System.out.print("r");
    66. else
    67. System.out.print(" ");h
    68. System.out.print(" ");
    69. }
    70. // zusätzliche Leerzeilen ausgeben
    71. System.out.println('\n');
    72. }
    73. // testet die Funktionen der Klasse
    74. public static void main(String[] args) {
    75. int[] a = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 199 };
    76. BinaereSuche b = new BinaereSuche(a);
    77. b.debug = true;
    78. int w = b.sucheRekursiv(5);
    79. System.out.println(w);
    80. }
    81. }
    Alles anzeigen
  • Also mit Klassen-Attributen würde ich an dieser Stelle nicht arbeiten. Besser Funktionsparameter.
    Aber ansonsten sieht der Algorithmus zum Suchen korrekt aus.

    Fehlt also der rekursive Selection Sort:

    Quellcode

    1. selectsort(field A, int l, int r) {
    2. if (l < r) then {
    3. q:= max(A, l, l+1, r);
    4. swap(A[q], A[r]);
    5. selectsort(A, l, r-1);
    6. }
    7. }
    8. int max(field A, int q, int l, int r) {
    9. if (l <= r) then {
    10. if (A[l] > A[q]) then {
    11. return max(A, l, l+1, r);
    12. } else {
    13. return max(A, q, l+1, r);
    14. }
    15. } else {
    16. return q;
    17. }
    18. }
    Alles anzeigen

    sortieralgorithmen.de/selectsort/algorithm1.htm