我创建了一个类,在其中我创建了一个选择排序的方法。我将数组作为用户输入并传入选择排序。在呼叫之前,它显示了值。在调用之后所有元素都是0。
import java.util.Scanner;
public class Selectionsortarray {
public static void Selectionsort(int num[]) {
for (int i=0;i<num.length;i++) {
for (int j=i+1;j<num.length;j++) {
if (num[j]<num[i]) {
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
}
}
public static void main(String[] args) {
Scanner k = new Scanner(System.in);
int a[] = new int[40];
System.out.println("Enter the no. of elements");
int n= k.nextInt();
System.out.println("Enter the array");
for (int i=0;i<n;i++) {
a[i] = k.nextInt();
}
System.out.println("The array before sorting is");
for (int i=0;i<n;i++) {
System.out.println(a[i]);
}
Selectionsort(a);
System.out.println("The array is");
for (int i=0;i<n;i++) {
System.out.println(a[i]);
}
k.close();
}
}
答案 0 :(得分:0)
您正在创建一个包含40个元素的数组,并对其进行排序,而不是创建大小为n
的数组(用户提供的输入)。
这会导致数组在开头有n
元素由您提供,尾部全部为零(40-n
元素)。对数组进行排序时 - 这些零被推到开头,当你打印时 - 只打印它们。
最简单的解决方法是更改行:
int a[] = new int[40];
进入
int a[] = new int[n];
并在扫描阵列长度后按下它。
另请注意,如果您尝试在当前代码中向阵列中插入40个以上的元素(n>40
),它将会崩溃。
答案 1 :(得分:0)
你的程序应该可以正常工作。这里的问题是,你定义了40个元素的数组,它们默认初始化为0,发布你覆盖用户输入的数字,结束后排序你只是按升序打印n个元素,这将打印所有零&#39 ; S
您需要删除此行:
int a[] = new int[40];
将其粘贴到int n = k.nextInt();
下方
int a[] = new int[n];
它应该有效。
这将节省空间并使您的排序更快,因为您最终会减少迭代次数。
答案 2 :(得分:0)
a数组有40个位置,大于0的数字位于数组的末尾,你只显示有序数组的第0个元素,它们都是0。