Java CombSort陷入无限循环?

时间:2015-04-24 01:46:37

标签: java arrays sorting loops

程序应该随机生成一个越来越大的整数序列,使用梳子排序算法对它们进行排序(同时计算比较次数),并打印每个排序序列的比较次数。我得到了伪代码,只需要实现它。这是:

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循环中。

1 个答案:

答案 0 :(得分:0)

根据@vesan和@Amos M. Carpenter的建议,我修改了数组索引,从0开始而不是1.还更新了swap方法,将参数值分配给数组,而不仅仅是重新分配新变量的值。