Java 计算选择排序中的交换数
我已经通读了所有的讨论,试图找到一个答案,但没有一个答案对我有效,所以我尝试这样做Java 计算选择排序中的交换数,java,sorting,Java,Sorting,我已经通读了所有的讨论,试图找到一个答案,但没有一个答案对我有效,所以我尝试这样做 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
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,因为它只交换第一个和最后一个元素。然而,它不起作用。虽然我知道如果我的条件不起作用,但我想不出什么会起作用。我似乎无法理解这样的逻辑,即当项目实际交换时,它会增加交换。为什么不在实际执行交换时增加计数器
//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:评论中的观点很好。如果数组已排序(即,
first
和i
相同),则当前代码仍执行多余的交换:
为什么不在实际执行交换时增加计数器
//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:评论中的观点很好。如果数组已排序(即,
first
和i
相同),则当前代码仍执行多余的交换:
为什么不在实际执行交换时增加计数器
//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:评论中的观点很好。如果数组已排序(即,
first
和i
相同),则当前代码仍执行多余的交换:
为什么不在实际执行交换时增加计数器
//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:评论中的观点很好。如果数组已排序(即,
first
和i
相同),则当前代码仍执行多余的交换:
在您的实现中,您将始终有n个交换(其中n是数组中的元素数) 我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素
if (first != i) {
temp = num[first];
num[first] = num[i];
num[i] = temp;
swapp++;
}
在您的实现中,您将始终有n个交换(其中n是数组中的元素数) 我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素
if (first != i) {
temp = num[first];
num[first] = num[i];
num[i] = temp;
swapp++;
}
在您的实现中,您将始终有n个交换(其中n是数组中的元素数) 我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素
if (first != i) {
temp = num[first];
num[first] = num[i];
num[i] = temp;
swapp++;
}
在您的实现中,您将始终有n个交换(其中n是数组中的元素数) 我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素
if (first != i) {
temp = num[first];
num[first] = num[i];
num[i] = temp;
swapp++;
}
唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。