不显示已排序的数组

时间:2014-11-20 09:13:34

标签: java arrays insertion-sort

我创建了一个类,在其中我创建了一个选择排序的方法。我将数组作为用户输入并传入选择排序。在呼叫之前,它显示了值。在调用之后所有元素都是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();

    }
}

3 个答案:

答案 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。