【发布时间】:2014-02-10 04:58:23
【问题描述】:
我已经阅读了所有试图找到答案的讨论,但没有一个答案对我有用,所以我正在尝试这种方式。
public static int SelectionSort(long[] num)
{
int i, j, first;
long temp;
int swap = 0;
int pass = 0;
int count = 0;
boolean Mini = false;
for (i = num.length - 1; i > 0; i--)
{
for(int k = 0; k < num.length; k++)
{
System.out.println(" k = " + k
+ " \t X[i] = " + num[k] + " swap count: " + swap);
}
System.out.println("");
first = 0; //initialize to subscript of first element
for(j = 1; j <= i; j ++) //locate smallest element between positions 1 and i.
{
if(num[j] < num[first])
{
first = j;
//Mini = true;
}
}
//if(Mini){
// swap++;
//}
temp = num[first]; //swap smallest found with element in position i.
num[first] = num[i];
num[i] = temp;
}
return swap;
}
使用一个简单的数组作为我的测试用例:
long[] X = {1, 4, 3, 2, 5};
交换次数应该只等于 1,因为它只交换第一个和最后一个元素。但是,它不起作用。虽然我知道我的 if 条件不起作用,但我想不出会发生什么。我似乎无法理解在实际交换项目时它会增加交换的逻辑。
【问题讨论】: