Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机排序不终止_Java_Sorting_Random - Fatal编程技术网

Java 随机排序不终止

Java 随机排序不终止,java,sorting,random,Java,Sorting,Random,假设ISASCCORDED功能符合预期(已测试) 我在这里做了一些愚蠢的事情,这就是为什么随机交换从不对数组进行排序-因为它每次只在不同的数组上进行1次交换 我的测试用例是 int[]values1=新的int[]{50,10,20,4,5,1,5} 暗示 public static boolean isAscSorted (int[] arr){ for (int i=0; i<arr.length-1; i++){ if (arr[i]> arr[i+1

假设ISASCCORDED功能符合预期(已测试) 我在这里做了一些愚蠢的事情,这就是为什么随机交换从不对数组进行排序-因为它每次只在不同的数组上进行1次交换

我的测试用例是 int[]values1=新的int[]{50,10,20,4,5,1,5}

暗示

public static boolean isAscSorted (int[] arr){

    for (int i=0; i<arr.length-1; i++){
        if (arr[i]> arr[i+1]){
            return false;
        }
    }
    return true;
}


public static boolean swap(int[]a,int i,int j)
{
    if (i == j){
        return false;
    }
    int temp=a[i];
    a[i]= a[j];
    a[j]=temp;
    return true;

 }


static int randomSort(int[] values) {

    //Ok Array is empty or null
    if( values == null || values.length==0){
        return 0;
    }

    boolean isSorted = false;
    int steps = 0;
    Random r = new Random();
    int limit = values.length-1; //SOL: should be int limit = values.length;


    while (!isAscSorted(values)){
        //choose 2 random positions
        int r1 = r.nextInt(limit);
        int r2 = r.nextInt(limit);

        //swap returns true if successful
        boolean swapRes = swap(values, r1,r2);

        //increment steps counter
        if (swapRes)
            steps++;

    }

    return steps;
}
public静态布尔值isasccordered(int[]arr){
对于(int i=0;i arr[i+1]){
返回false;
}
}
返回true;
}
公共静态布尔交换(int[]a,int i,int j)
{
如果(i==j){
返回false;
}
int temp=a[i];
a[i]=a[j];
a[j]=温度;
返回true;
}
静态int随机排序(int[]值){
//Ok数组为空或null
如果(值==null | |值。长度==0){
返回0;
}
布尔值isSorted=false;
int步数=0;
随机r=新随机();
int limit=values.length-1;//SOL:应该是int limit=values.length;
而(!isAscSorted(值)){
//选择2个随机位置
int r1=r.nextInt(极限);
int r2=r.nextInt(极限);
//如果交换成功,则返回true
布尔swapRes=交换(值r1、r2);
//递增步数计数器
如果(swapRes)
steps++;
}
返回步骤;
}

该漏洞是由于使用了Random。 我已指示int limit=值。长度-1;
这意味着最后一个数组位置从未交换过,因此数组永远无法排序(例如,除非第二个和最后一个数字相同且最大)。

该错误是由于使用了Random。 我已指示int limit=值。长度-1;
这意味着最后一个数组位置从未交换,因此数组永远无法排序(例如,除非第二个和最后一个数字相同且最大)。

如果一行中有相同的值,isAscSorted是否返回true?对于{1,4,5,5,10,20,50},{6,6,6,6,6,6,6,6,6,6}返回true
while
的条件是否错误?我的意思是,在对值进行排序时,您应该继续这样做。因为你是在没有排序的情况下进行排序的,所以你的随机算法需要花很多时间来整理它。你是怎么想到随机排序的?这是一个有点不敏感的测试,首先使用更小的数组(类似于3个元素)。尝试使用几乎排序的数组,以增加解决问题的机会。Piyin否,循环条件是正确的。问题在于limit=values.length-1。这意味着最终的索引位置从未被随机选择,因此无论进行了多少次交换,数组都不会被排序。如果一行中有相同的值,isAscSorted是否返回true?对于{1,4,5,5,10,20,50},{6,6,6,6,6,6,6,6,6,6,6,6,6,6},的条件是否错误?我的意思是,在对值进行排序时,您应该继续这样做。因为你是在没有排序的情况下进行排序的,所以你的随机算法需要花很多时间来整理它。你是怎么想到随机排序的?这是一个有点不敏感的测试,首先使用更小的数组(类似于3个元素)。尝试使用几乎排序的数组,以增加解决问题的机会。Piyin否,循环条件是正确的。问题在于limit=values.length-1。这意味着最终索引位置从未被随机选择,因此无论进行了多少次交换,数组都不会被排序。