Java 冒泡排序不起作用
Java Bubble sorting not working
我只想编写一个对 3 个整数进行排序的程序。整数是从输入对话框中输入的。我的代码非常简单。我只需要获取一些数据并将它们放入名为 num
的数组中。然后我创建了一个方法来使用冒泡排序逻辑对数据进行排序。该方法称为 sort
。我添加了命令以显示 System.out.println("Sorted Result : "+Arrays.toString(num))
的排序结果,但这不起作用。
输出只是让我输入数据,然后什么也没有发生。
任何人都可以告诉我我错过了什么或我做错了什么吗?
谢谢。
package numThree;
import java.util.Scanner;
import java.util.Arrays;
public class sort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[3];
//INPUT DATA
System.out.println("Enter integers : ");
for(int i=0;i<=num.length;i++){
num[i]=sc.nextInt();
}
sort(num);
}
//SORTING
public static void sort (int[] num){
for(int i=0;i<=num.length-1;i++){
for(int j=0;j<=num.length-i;j++){
if(num[j-1]>num[j]){
int temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
System.out.println("Sorted Result : "+Arrays.toString(num));
}
}
}
我相信您需要一个布尔标志来实现冒泡排序,因为您无法提前知道循环将执行多少次连续元素的交换。
试试这个:
package numThree;
import java.util.Scanner;
import java.util.Arrays;
public class sort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[3];
//INPUT DATA
System.out.println("Enter integers : ");
for(int i=0;i<=num.length;i++){
num[i]=sc.nextInt();
}
sort(num);
}
//SORTING
public static void sort (int[] num){
boolean swapped = true;
while(swapped){
swapped = false;
for(int i=0;i<num.length-1;i++){
if(num[i]>num[i+1]){
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
swapped = true;
}
}
}
System.out.println("Sorted Result : "+Arrays.toString(num));
}
}
请注意,它仍然可以稍微改进:每次循环时,最大的数字将尽可能接近数组的末尾:不需要检查或交换直到每次结束时间。
通过使用变量作为索引的上限 i
并在 for 循环后减小其值,可以减少迭代总数。
int end = num.length-1;
while(swapped){
swapped = false;
for(int i=0;i<end;i++){
if(num[i]>num[i+1]){
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
swapped = true;
}
}
end--;
}
我只想编写一个对 3 个整数进行排序的程序。整数是从输入对话框中输入的。我的代码非常简单。我只需要获取一些数据并将它们放入名为 num
的数组中。然后我创建了一个方法来使用冒泡排序逻辑对数据进行排序。该方法称为 sort
。我添加了命令以显示 System.out.println("Sorted Result : "+Arrays.toString(num))
的排序结果,但这不起作用。
输出只是让我输入数据,然后什么也没有发生。
任何人都可以告诉我我错过了什么或我做错了什么吗? 谢谢。
package numThree;
import java.util.Scanner;
import java.util.Arrays;
public class sort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[3];
//INPUT DATA
System.out.println("Enter integers : ");
for(int i=0;i<=num.length;i++){
num[i]=sc.nextInt();
}
sort(num);
}
//SORTING
public static void sort (int[] num){
for(int i=0;i<=num.length-1;i++){
for(int j=0;j<=num.length-i;j++){
if(num[j-1]>num[j]){
int temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
System.out.println("Sorted Result : "+Arrays.toString(num));
}
}
}
我相信您需要一个布尔标志来实现冒泡排序,因为您无法提前知道循环将执行多少次连续元素的交换。
试试这个:
package numThree;
import java.util.Scanner;
import java.util.Arrays;
public class sort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[3];
//INPUT DATA
System.out.println("Enter integers : ");
for(int i=0;i<=num.length;i++){
num[i]=sc.nextInt();
}
sort(num);
}
//SORTING
public static void sort (int[] num){
boolean swapped = true;
while(swapped){
swapped = false;
for(int i=0;i<num.length-1;i++){
if(num[i]>num[i+1]){
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
swapped = true;
}
}
}
System.out.println("Sorted Result : "+Arrays.toString(num));
}
}
请注意,它仍然可以稍微改进:每次循环时,最大的数字将尽可能接近数组的末尾:不需要检查或交换直到每次结束时间。
通过使用变量作为索引的上限 i
并在 for 循环后减小其值,可以减少迭代总数。
int end = num.length-1;
while(swapped){
swapped = false;
for(int i=0;i<end;i++){
if(num[i]>num[i+1]){
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
swapped = true;
}
}
end--;
}