我有一个包含用户输入的数组。该程序是关于冒泡排序,选择排序和插入排序。我无法解决选择部分中的问题。交换计数器总是给我数组的长度 - 1.我知道这是因为第一个for循环但我找不到任何解决方案。
int SComparison = 0;
int SSwaps = 0;
for (int i = 0; i < SorBag.length - 1; i++) {
min = i;
for (int j = i + 1; j < SorBag.length; j++) {
SComparison++;
if (SorBag[j] < SorBag[min]) {
min = j;
}
}
SSwaps++;
temp2 = SorBag[i];
SorBag[i] = SorBag[min];
SorBag[min] = temp2;
}
我尝试将SSwaps放入“if”,它总是给我0.我尝试制作一个“if”来查找有多少数组元素小于第一个数组元素。还是一样。应该把SSwaps ++放在哪里?谢谢!
答案 0 :(得分:0)
检查此代码:
public class Test {
public static void main(String[] args) {
int SComparison = 0;
int SSwaps = 0;
int totalSwap=0;
int min = 0;
int temp = 0;
int SorBag[] = { 1, 4, 3 };
for (int i = 0; i < SorBag.length - 1; i++) {
min = i;
for (int j = i + 1; j < SorBag.length; j++) {
SComparison++;
if (SorBag[j] < SorBag[min]) {
min = j;
temp = SorBag[i];
SorBag[i] = SorBag[min];
SorBag[min] = temp;
SSwaps++;
totalSwap+=SSwaps;
System.out.println("swap count at "+j+" pass : "+SSwaps);
}
}
SSwaps=0;
}
for (int i = 0; i < SorBag.length; i++)
System.out.print(SorBag[i]+" ");
System.out.println("\nTotal swap count :"+totalSwap);
}
}
输出:
swap count at 2 pass : 1
1 3 4
Total swap count :1
答案 1 :(得分:0)
选择排序通过比较(您的if ...
)更新min 索引,并在需要时执行元素交换 。
您将swapps++
置于正确的位置。但你应该检查min == i
。您只想在min !=i
时进行交换。相反,你没有检查,反正只是交换。这就是你修复length -1
P.S。请尝试遵循java命名约定。
答案 2 :(得分:0)
问题是什么? 使用您的代码,这可以提供4次交换,这是正确的。
int[] SorBag = new int[]{5 ,4 ,3 ,2 ,1};
int min = 0;
int SComparison = 0;
int SSwaps = 0;
for (int i = 0; i < SorBag.length - 1; i++) {
min = i;
for (int j = i + 1; j < SorBag.length; j++) {
SComparison++;
if (SorBag[j] < SorBag[min]) {
min = j;
SSwaps++;
}
}
int temp2 = SorBag[i];
SorBag[i] = SorBag[min];
SorBag[min] = temp2;
}
System.out.println("sswaps : "+SSwaps);
for(int i = 0; i<5;i++){
System.out.println("SorBag["+i+"] = "+SorBag[i]);
}
}