Arrays 使用while语句时进行冒泡排序
我必须编写代码对一些数字进行排序,虽然我决定使用“for”而不是“while”,但我想知道为什么它会这样做。它把所有的东西都分类了,但是它把14号留在了原来的位置,如果有人能解释一下的话,我会非常感激的Arrays 使用while语句时进行冒泡排序,arrays,sorting,while-loop,bubble-sort,Arrays,Sorting,While Loop,Bubble Sort,我必须编写代码对一些数字进行排序,虽然我决定使用“for”而不是“while”,但我想知道为什么它会这样做。它把所有的东西都分类了,但是它把14号留在了原来的位置,如果有人能解释一下的话,我会非常感激的 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
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++;
}
}
}
公共类排序格式{
公共静态void main(字符串参数[]){
int-listofNumber[]={16,100,205,8,1,3,2,5,7,6,15,10,14};
int Length=ListOfNumbers.Length;
int=1;
int T;
整数阶=0;
System.out.println(“给定编号:”);
while(顺序<长度){
System.out.println(“+listofNumber[订单]);
订单++;
}
System.out.println(“\n”);
System.out.println(“排序后:”);
while(排序<长度){
while(顺序<长度-排序){
if(ListOfNumber[Order]>ListOfNumber[Order+1]){
int temp=列表编号[顺序];
ListofNumber[顺序]=ListofNumber[顺序+1];
ListofNumber[订单+1]=临时订单;
}
订单++;
}
顺序=0;
排序++;
}
while(顺序<长度){
System.out.println(编号列表[订单]);
订单++;
}
}
}
这是因为在第一个循环中使用变量Order
来显示数组的初始状态
当它在内部循环中使用时,它已经在数组的末尾,因此在第一次迭代中没有排序。Sorted
变量增加,最后一项未排序
插入顺序=0代码>在显示初始状态的循环和执行排序的循环之间
旁注:气泡排序缺少一些东西。它应该检查内部循环中是否有任何交换。否则,排序就完成了,您可以退出外部循环。您的实现看起来有点复杂。我建议您重构并将排列代码放在一个单独的方法中,以使其更具可读性。此外,您还应该在每次迭代时检查是否存在任何排列。如果没有排列,那么就完成了。否则,您应该再次迭代。通过一些重构,事情变得简单了
这是我用您的输入完成并测试的一个实现
此“SimpleBulleSort”方法依赖于交换方法和printArray方法(见下文)
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]
[2051001687151465321]
[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
而不是,使其升序。您只需再执行一个循环,使int Sorted=0;
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();
}