我必须编写代码来对某些数字进行排序,虽然我决定使用“for”而不是“while”,但我想知道它为什么会这样做。它正在对所有内容进行排序,但如果有人能够解释它是非常合适的那么它会离开它所在的位置
public class SortForMe {
public static void main(String args[]) {
int ListOfNumbers[] = {16, 100, 205, 8, 1, 3, 2, 5, 7, 6, 15, 10, 14};
int Length = ListOfNumbers.length;
int Sorted = 1;
int T;
int Order = 0;
System.out.println("Given number :");
while(Order < Length) {
System.out.println(" " + ListOfNumbers[Order]);
Order++;
}
System.out.println("\n");
System.out.println("After Sort:");
while (Sorted < Length) {
while (Order < Length - Sorted) {
if (ListOfNumbers[Order] > ListOfNumbers[Order + 1]) {
int temp = ListOfNumbers[Order];
ListOfNumbers[Order] = ListOfNumbers[Order + 1];
ListOfNumbers[Order + 1] = temp;
}
Order++;
}
Order = 0;
Sorted++;
}
while(Order < Length) {
System.out.println(ListOfNumbers[Order]);
Order++;
}
}
}
答案 0 :(得分:1)
您的实施看起来有点复杂。我建议你重构并将排列代码放在一个单独的方法中,以使其更具可读性。此外,您应该检查每次迭代是否有任何排列。如果没有排列,则完成。否则你应该再次迭代。通过一些重构,事情会变得更简单。
以下是我使用您的输入进行测试的实现
这个`simpleBublleSort&#39;方法依赖于swap方法和printArray方法(见下文)
public void simpleBubbleSort(int[] datas)
{
boolean stillHasDisorder = false;
do
{
stillHasDisorder = false;
for (int i = 0; i <= datas.length - 2; i++)
{
if (new Integer(datas[i]).compareTo(new Integer(datas[i+1])) < 0)
{
swap(datas,i, i + 1);
stillHasDisorder = true;
}
}
printArray(datas);
} while (stillHasDisorder);
}
交换方法与交换两个比较元素的方法相同
public void swap(int[] datas, int position1, int position2)
{
int temp = datas[position1];
datas[position1] = datas[position2];
datas[position2] = temp;
}
printArray在每次迭代后都可以很好地打印数组,这样我们就可以直观地看到发生了什么
public void swap(int[] datas, int position1, int position2)
{
int temp = datas[position1];
datas[position1] = datas[position2];
datas[position2] = temp;
}
这是使用输入数据的演示代码
public static void doDemo() {
int[] datas = {16, 100, 205, 8, 1, 3, 2, 5, 7, 6, 15, 10, 14};
(new BubbleSort()).simpleBubbleSort(datas);
}
public static void main(String[] args) {
doDemo();
}
结果如下:
[100 205 16 8 3 2 5 7 6 15 10 14 1]
[205 100 16 8 3 5 7 6 15 10 14 2 1]
[205 100 16 8 5 7 6 15 10 14 3 2 1]
[205 100 16 8 7 6 15 10 14 5 3 2 1]
[205 100 16 8 7 15 10 14 6 5 3 2 1]
[205 100 16 8 15 10 14 7 6 5 3 2 1]
[205 100 16 15 10 14 8 7 6 5 3 2 1]
[205 100 16 15 14 10 8 7 6 5 3 2 1]
[205 100 16 15 14 10 8 7 6 5 3 2 1]
当然,您可以将比较更改为>0
而非<0
答案 1 :(得分:0)
那是因为你在第一个循环中使用变量Order
来显示数组的初始状态。
当它在内部循环中使用时,它已经位于数组的末尾,因此在第一次迭代中没有任何内容被排序。 Sorted
变量增加,最后一项未分类。
在显示初始状态的循环和执行排序的循环之间插入Order = 0;
。
旁注:泡泡排序缺少某些东西。它应检查内循环中是否有任何交换。如果没有,排序就完成了,你可以退出外循环。