我只想编写一个对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));
}
}
}
答案 0 :(得分:0)
我相信您需要一个布尔标志来实现冒泡排序,因为您无法事先知道循环执行交换连续元素的次数。
试试这个:
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--;
}