java - Java 冒泡排序仅返回部分排序的
问题描述
我是 Java 新手,所以一直在尝试将一些旧的 JS 练习翻译成 Java。
这是一个不起作用的冒泡排序(我知道,我知道......):
class BubbleSort{
public static void main(String args[]){
int nums [] = {5, 4, 6, 3, 12, 1};
Boolean swap = true;
while(swap){
swap = false;
for(int i = 1; i<nums.length ; i++){
if (nums[i - 1] > nums[i]){
int t = nums[i-1];
nums[i-1] = nums[i];
nums[i] = t;
swap = true;
}else{
swap = false;
}
}
}
System.out.print("Sorted: ");
for(int j=0 ; j<nums.length ; j++)
System.out.print(nums[j] + " ");
}
}
它返回 4, 3, 5, 1, 6, 12...所以发生了一些交换,但有些东西使它提前结束。
谁能发现我的问题?
解决方案
只需删除代码中的 else 块(如下面的代码示例所示)。一旦没有订购一件东西,您就必须进行另一次交换。
在您的代码中,如果最后一项的顺序错误,您只会进行另一次交换。如果您的数组末尾排序得太快,那么您的排序也太快结束了。
class BubbleSort{
public static void main(String args[]){
int nums [] = {5, 4, 6, 3, 12, 1};
Boolean swap = true;
while(swap){
swap = false;
for(int i = 1; i<nums.length ; i++){
if (nums[i - 1] > nums[i]){
int t = nums[i-1];
nums[i-1] = nums[i];
nums[i] = t;
swap = true;
}/* else{
swap = false;
}*/
}
}
System.out.print("Sorted: ");
for(int j=0 ; j<nums.length ; j++)
System.out.print(nums[j] + " ");
}
}
推荐阅读
- php - 连接两份 JSON 数据
- java - 如何在 Android Studio 中将大文本文件转换为 XML?
- node.js - 本地 package.json 文件
- ios - Auth0 Swift SDK .authentication().login 返回无效令牌
- python - 是否可以在使用全局标志时强制正则表达式只匹配一个组?
- c# - 模拟点击网站并在 C# 中获取响应
- bash - 作为 bash 脚本的输入参数的文件列表
- java - 调用构造函数时找不到符号
- c# - 为什么类型约束在设置为类时并不总是强制执行?
- gstreamer - gstreamer 中动作信号与查询的目的是什么?