我刚刚遇到这个代码,我应该打开一个实验室任务。代码的作用是输入一个包含单词列表的“.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