2016-03-27 5 views
1

Helfen Sie mir diesen Algorithmus zu simulieren: enter image description hereeinen Algorithmus mit Wiederholung Implementierung/bis Java mit

das Array gegeben [5 3 1 9 8 2 4 7], dass ich davon ausgehen, = 0.

I umgewandelt es zu kodieren:

public class Test { 



public static void main(String[] args) { 
    int[] a = {5,3,1,9,8,2,4,7}; 
    int l = 0; 
    int p = a[l]; 

    int i=l; 

    int j = 8; 
    do{ 
     do{ 
      i++; 
      System.out.println("Value of i " + i); 

     }while(a[i]>=p); 
     do{ 
      j--; 
      System.out.println("\nValue of j " + j); 

     }while(a[j]<p); 
     swap(a,i,j); 
     System.out.println("\nSwapped! a[i] = " + a[i] + " a[j] = " + a[j]); 
     System.out.println("Swap 1"); 
     for(int k : a){ 
      System.out.print(k + " "); 

     } 

    }while(i>=j); 
    if(i>=j){ 
     swap(a,i,j); 
     System.out.println("\nSwapped! a[i] = " + a[i] + " a[j] = " + a[j]); 
     System.out.println("Swap 2"); 
     for(int k : a){ 
      System.out.print(k + " "); 

     } 
    } 
    else{ 
     swap(a,i,j); 
     System.out.println("\nSwapped! a[i] = " + a[i] + " a[j] = " + a[j]); 
     System.out.println("Swap 3"); 
     for(int k : a){ 
      System.out.print(k + " "); 

     } 
     swap(a,l,j); 
     System.out.println("\nSwapped! a[l] = " + a[l] + " a[j] = " + a[j]); 
     System.out.println("Swap 4"); 
     for(int k : a){ 
      System.out.print(k + " "); 

     } 

    } 


    System.out.println("\nreturn value is: " + j); 

    System.out.println("Final array: "); 
    for(int k : a){ 
     System.out.print(k + " "); 
    } 

} 

public static void swap(int a[], int a1, int a2){ 
    int temp = a[a1]; 
    a[a1] = a[a2]; 
    a[a2] = temp; 
} 

} 

Das Ergebnis ist:

enter image description here

Aber wenn ich es in Papier simuliere, sind meine Ergebnisse unterschiedlich. Entweder habe ich "Wiederholen bis" mit "Do While" oder falsch im Papier analysiert.

Teilen Sie mir Ihre Simulationen Kumpels :) Danke!

Antwort

2

Es ist entweder ich falsch repeatuntil für dowhile oder ich falsch in Papier analysiert.

Sie haben repeat/until falsch übersetzt.

The construct comes from Pascal-like languages. Es ist ähnlich wie do/while, aber die Bedeutung der Bedingung ist völlig gegensätzlich: in do/while die Bedingung am Ende Zustand Fortsetzung ist, aber in repeat/until die Bedingung ist die Abbruchbedingung.

Die Lösung für dieses Problem ist invertiert die Bedingungen von repeat/until Schleifen:

do{ 
    i++; 
    System.out.println("Value of i " + i); 
} while(a[i]< p); 
//  ^
+0

Thanks man! Jetzt habe ich dieselben Ergebnisse wie bei meiner Simulation auf Papier. Vielen Dank für Ihre Klarstellung! :) – Andre