当修改或更改时,如果输入为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]);
}
}
}
答案 0 :(得分:0)
首先考虑选择排序的作用。我们将数组视为两部分的集合:已排序和未排序。一个索引跟踪已排序部分的大小(代码中为i
)。起初,我是零,因为没有任何排序。另一个索引(即j
)用于查找未排序部分中的最小数字。
从未排序的部分,我们选择第一个元素并假设它是最小的(所以我们设置pos = i
,因为我是排序部分的大小,它方便地指向未排序部分的第一个元素) 。为了验证没有更小的数字(可能存在),我们迭代未排序的部分(即内部循环)并将每个数字与我们当前认为最小的数字进行比较。如果我们找到一个较小的数字,我们会更新当前对最小数字索引的知识。
if(a[j]<a[pos]) pos = j;
当我们到达循环结束时( 检查整个未排序的部分之后),我们想要将未分类部分中的最小数字移动到已排序部分(如果它尚未存在,那么如果i!=pos
)。为此,我们将它移动到未排序部分的前面(使用交换操作)并递增i,然后指示已排序的部分已经增长。
你能用这些指针修复你的代码吗?