【发布时间】:2015-03-16 03:15:17
【问题描述】:
这是我的作业:我想知道在选择排序中发生了多少比较和交换。当我像这样以相反的顺序或降序声明我的数组时:
int arr[] = { 5, 4, 3, 2, 1 };
…它运行良好,计数比较和交换,但是当我尝试以相反的顺序给出“n”和填充数组时,它以降序填充它,但它不能正常工作以降序排序来计算我的交换虽然它计数比较。
代码如下:
public class SelectionSort {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner in = new Scanner(System.in);
int compares = 0, exchanges = 0, x;
x = in.nextInt();
int[] arr = new int [x];
int n = arr.length;
int s = 0;
int min;
int temp, i, j;
System.out.print("Filling Array");
for(i = n - 1; i > 0; i--)
{
arr[i] = i;
System.out.print(" " + arr[i]);
}
System.out.println("");
for(i = 0; i < n ; i++)
{
min = i ;
for(j = i + 1; j < n; j++)
{
compares++;
if(arr[min] > arr[j])
min = j;
}
if(min != i)
{
exchanges++;
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
System.out.println("Iteration " + (++s));
for(int a = 0; a < arr.length; a++)
System.out.print(" " + arr[a]);
System.out.println("");
}
System.out.println("");
System.out.println("Compares -- >> " + compares);
System.out.println("Exchanges -->> " + exchanges);
}
}
【问题讨论】:
-
您能否提供一些示例,说明预期的比较和交换与您的程序为给定数组提供的内容?
-
如果我运行你的代码并输入 4 它会打印:
Filling Array 3 2 1Iteration 10 1 2 3Iteration 2Iteration 20 1 2 3Iteration 30 1 2 3@9876543@30@@987653432@@1 987654333@ 不知道你期望它是什么。 -
假设我有一个数组 {2,1,3,4} ,现在函数检查每个元素是否大于下一个然后交换所以交换++,在这个数组中只有一个交换发生,而 6 比较寻找大小
-
“现在函数检查每个元素”,问题是我在你的代码中看不到任何函数,除了
main函数又名方法。 -
@WonderWorld 看到你以相反的顺序填充数组,并且它的运行迭代以升序排列,所以如果你的数组在升序中仅比较是增量,则不会发生任何交换
标签: java arrays sorting selection-sort