2017-03-09 1 views
-5

Ich bin gerade auf diesen Code für eine Laboraufgabe gestoßen, die ich einreichen soll. Was der Code tut, ist die Eingabe einer ".dat" mit einer Liste von Wörtern (Die erste Zeile in der Datei ist die Anzahl der Datensätze). Dann prüft es die Länge jedes Wortes innerhalb der ".dat" -Datei und sortiert es basierend auf der Länge. Die niedrigste Anzahl von Buchstaben ist zuerst und die höchste ist die letzte. Hier ist der Code.Warum multiplizieren wir 2 innerhalb der for-Schleife?

Scanner scan = new Scanner(new File("words.dat")); 

int dataSets = scan.nextInt(); 
scan.nextLine(); 

String[] words = new String[dataSets]; 
//int[] length = new int[dataSets]; 

for(int a=0; a<dataSets; a++) 
{ 
    words[a] = scan.next(); 
} 

Arrays.sort(words); 

for(int a = 0; a < words.length * 2; a++) //what is the purpose of this forloop? 
{ 
    for(int i = 0; i < words.length; i++) 
    { 
     if(i < words.length - 1) 
     { 
      if(words[i].length() > words[i + 1].length()) 
      { 
       String temp = words[i]; 

       words[i] = words[i + 1]; 

       words[i + 1] = temp; 
      } 
     } 
    } 
} 

for(String word : words) 
{ 
    System.out.println(word); 
} 

ich nicht bekommen, warum multiplizieren wir die erste for-Schleife von 2.

for(int a = 0; a < words.length * 2; a++) 
+2

Schnelles Lesen, das sehe ich als eine nicht effiziente Blase sortieren. Aber die Komplexität ist O (n^2), also erkläre diesen Fehler, das braucht dieses '* 2' nicht, da dies in zwei Schleifen geschieht. – AxelH

+4

" Ich bin gerade auf diesen Code für eine Laboraufgabe gestoßen im." Sie meinen, Sie haben jemandes Code gestohlen, um ihn als Ihren eigenen Auftrag zu verwenden, aber Sie verstehen ihn nicht? – Kayaman

+0

[Blasensorte - Wikipedia] (https://en.wikipedia.org/wiki/Bubble_sort). Sie werden mit animierten Beispielen eine gute Erklärung für diesen Algorithmus finden. – AxelH

Antwort

1

Ich denke, dass dies eine grundlegende Implementierung einer Blase Sort ist. Sie finden eine Erklärung dieses Algorithmus unter wiki.

Kurz gesagt, überprüft dieser Algorithmus jedes Paar und invertiert es bei Bedarf. Um ein vollständig sortiertes Ergebnis zu erhalten, müssen sie im schlimmsten Fall das Array n*n von n2 und nicht n*2 analysieren.

Übrigens, Arrays.sort(words); sortieren Sie bereits Ihr Array.

+1

Ich möchte es nach Länge nicht alphabetisch sortieren. Arrays.sort wird also nicht sortieren, wie ich es sortieren soll – Kanna6501

+1

@ Kanna6501 aber Sie müssen nur einen Komparator implementieren, um an die ['sort (T [] a, Comparator c)'] (https: // docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)), um die Aufgabe zu erledigen. PS: es wird im schlimmsten Fall 'n * 2'-Lesen, nicht Iteration in der ersten Schleife, benötigen. Das ist also die Summe jedes Zugriffs auf das Array (die Summe beider Schleifen);) – AxelH

0

Die äußere Schleife ist erforderlich, da es mehrere Iterationen der Schleife nehmen kann vollständig zu sortieren das Array.

Sie könnten dieses Verhalten leicht zeigen, indem Sie words.length * 2 durch verschiedene hart codierte Werte ersetzen, so dass Sie sehen, wie die Sortierung möglicherweise mehrere Iterationen benötigt, wenn das Array geschrieben wird.

words.length * 2 stellt sicher, dass genügend Iterationen stattgefunden haben, damit das Array korrekt sortiert wird ... (Bei einer Bubble-Sortierung muss die äußere Schleife für jedes Element im Array einmal durchlaufen, sodass words.length ausreichen sollte)

Verwandte Themen