/ * 这是提示:
以未排序的数组a开头
输出:排序数组a。
找到数组a [1:n]中的最小元素,将其称为a [j]。 如果它小于a [0],则用a [0]交换它。 对索引1、2,...重复此过程,直到对who数组进行排序。 * /
public class assing2 {
public static void main(String args[])
{
//array of ints
int[] A = new int[] {33, 20, 8, 11, 5};
int min_id = 0;
int temp_i = 0;
//int temp_max = 0;
for (int i = 0; i < A.length; i++)
{
min_id = i;
temp_i = A[i];
for (int j = 1; j < A.length; j++)
{
if (A[min_id] > A[j])
{
min_id = j;
}
}
A[i] = A[min_id];
A[min_id] = temp_i;
}
System.out.println("Sorted array");
for ( int i = 0; i < A.length; i++)
{
System.out.println(A[i]);
}
}
}
这是输出
排序数组
5
20
11
33
8
当我在调试器中运行它时,我可以看到第一个for循环的前2个迭代看起来像在工作,但之后却未对排序的内容进行排序。
我的逻辑怎么了?
答案 0 :(得分:3)
for (int j = 1; j < A.length; j++)
是错误的。您应该只检查i之后的元素,因为i之前的元素是按先前的迭代排序的。所以应该是
for(int j = i+1; j < A.length; j++)
同样在第一个循环中,您不需要对最后一个元素做任何事情。您可以将停止条件更改为i<A.length-1