Java 随机排序不终止
假设ISASCCORDED功能符合预期(已测试) 我在这里做了一些愚蠢的事情,这就是为什么随机交换从不对数组进行排序-因为它每次只在不同的数组上进行1次交换 我的测试用例是 int[]values1=新的int[]{50,10,20,4,5,1,5} 暗示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
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。这意味着最终索引位置从未被随机选择,因此无论进行了多少次交换,数组都不会被排序。