我剛剛遇到這個代碼,我應該打開一個實驗室任務。代碼的作用是輸入一個包含單詞列表的「.dat」(文件中的第一行是數據集的數量)。然後它檢查「.dat」文件中每個單詞的長度,並根據長度進行排序。最低的字母數是第一個,最高的是最後一個。這是代碼。爲什麼我們在for循環中乘以2?
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);
}
我不明白爲什麼我們乘的第一個for循環由2
for(int a = 0; a < words.length * 2; a++)
快速閱讀,這看起來是一個不高效的泡沫排序。但複雜性是O(n^2),所以解釋這個錯誤,這不需要這個'* 2',因爲這是在兩個循環中完成的。 – AxelH
「我剛剛遇到這個代碼,在。」你的意思是你偷了某人的代碼,目的是把它作爲你自己的任務,但你不明白它? – Kayaman
[Bubble sort - Wikipedia](https://en.wikipedia.org/wiki/Bubble_sort)。你會用動畫例子找到這個算法的一個很好的解釋。 – AxelH