程序应该随机生成一个越来越大的整数序列,使用梳子排序算法对它们进行排序(同时计算比较次数),并打印每个排序序列的比较次数。我得到了伪代码,只需要实现它。这是:
import java.util.*;
public class CombSort{
public static int MAXINT = 10000;
public static int[] intArray = new int[MAXINT];
public static int index;
public static long comparisons;
public static void main(String[] args)
{
for(index = 10; index <= 10000; index = index * 10)
{
comparisons = 0;
Generate(intArray, index);
Sort(intArray, index);
Output(index, comparisons);
}
}
public static void Generate(int[] valueArray, int count)
{
Random generator = new Random();
int temp;
for(temp = 1; temp <= count; temp++)
{
valueArray[temp] = generator.nextInt(MAXINT) + 1;
}
}
public static void Output(int index, long count)
{
System.out.println("Number of values in array: " + index);
System.out.println("Number of comparisons required: " + count);
System.out.println();
}
public static void Swap(int value1, int value2, int temp)
{
temp = value1;
value1 = value2;
value2 = temp;
}
public static void Sort(int[] value, int tally)
{
int i, j, gap;
boolean swapped;
gap = tally;
swapped = true;
while(swapped == true || gap > 1)
{
if (Math.floor((gap /1.3 * 100) / 100) > 1)
{
gap = (int)Math.floor((gap/1.3*100)/100);
}
else gap = 1;
swapped = false;
for(i = 1; i <= (tally - gap); i++)
{
j = i + gap;
comparisons++;
if(value[i] > value[j])
{
Swap(value[i], value[j], tally);
swapped = true;
}
}
}
}
}
没有编译错误。当我运行它时,它只是继续加载而且不会打印任何东西。任何帮助表示赞赏。
添加注释:我插入了一些要打印的文本,看起来问题出现在Sort方法的for循环中。
答案 0 :(得分:0)
根据@vesan和@Amos M. Carpenter的建议,我修改了数组索引,从0开始而不是1.还更新了swap
方法,将参数值分配给数组,而不仅仅是重新分配新变量的值。