选择当输入为零或负数时,排序代码无法正常工作

时间:2015-03-11 11:54:22

标签: java

当修改或更改时,如果输入为0或负数,则下面的代码需要在选择排序时正常工作。

import java.util.Scanner;

public class SelectionSort {
    public static void main(String[] args) {
        int i,j,pos,swap=0,n;
        int[] array = new int[100];

        System.out.println("Enter the number of elements");

        Scanner input = new Scanner(System.in);

        n = input.nextInt();

        for(i=0;i<n;i++) {
            array[i] = input.nextInt();
        }

        for(i=0;i<n-1;i++) {
            pos=i;

            for(j=i+1;j<n;j++) {
                if(array[pos]>array[j])

                pos = j;

                if(pos!=i) {
                    swap=array[i];

                    array[i]=array[pos];

                    array[pos]=swap;
                }
            }
        }

        for(int a=0;a<n;a++) {
            System.out.println(array[a]);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

首先考虑选择排序的作用。我们将数组视为两部分的集合:已排序和未排序。一个索引跟踪已排序部分的大小(代码中为i)。起初,我是零,因为没有任何排序。另一个索引(即j)用于查找未排序部分中的最小数字。

从未排序的部分,我们选择第一个元素并假设它是最小的(所以我们设置pos = i,因为我是排序部分的大小,它方便地指向未排序部分的第一个元素) 。为了验证没有更小的数字(可能存在),我们迭代未排序的部分(即内部循环)并将每个数字与我们当前认为最小的数字进行比较。如果我们找到一个较小的数字,我们会更新当前对最小数字索引的知识。

if(a[j]<a[pos]) pos = j;

当我们到达循环结束时( 检查整个未排序的部分之后),我们想要将未分类部分中的最小数字移动到已排序部分(如果它尚未存在,那么如果i!=pos)。为此,我们将它移动到未排序部分的前面(使用交换操作)并递增i,然后指​​示已排序的部分已经增长。

你能用这些指针修复你的代码吗?