即使在 2 个数字之后,它也不会输出任何内容。这是我为提高技能而做的 Bogo 排序程序,但在蓝色 J 中,它似乎在 Input 后卡住了,所以这里有什么问题?我尝试 store 数组 b[] 中的随机数并检查该数字是否不重复,然后将该索引用于 store 一个数字。
package practice;
import java.util.*;
class bogosort
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("Enter the length to Sort");
System.out.println("Caution this sorting could take hours if used more than 4 Numbers");
int n;
n=sc.nextInt();
int a[]=new int[n],b[]=new int[n],i,j,f=0,p=0,k=0;
System.out.println("Enter the numbers");
for (i=0;i<n;i++)
{
a[i]=sc.nextInt();
b[i]=-1;
}
while (p==0)
{
for (i=0;i<n;i++)
{
b[i]=(int)Math.random()*10;
for (j=0;j<n;j++)
{
if (b[i]==b[j] && i!=j)
{
i--;
f=1;
break;
}
}
if (f==1)
{
f=0;
continue;
}
else
a[i]=a[b[i]];
}
k++;
for (i=0;i<n-1;i++)
{
if (a[i]>a[i+1])
{
p=0;
break;
}
else
p=1;
}
}
System.out.println("Sorted Array");
for (i=0;i<n;i++)
{
System.out.println(a[i]);
}
System.out.println("It took " + k + "turns");
}
}```
回答1
(int)Math.random()*10;
始终是 0
而不是区间 [0, n-1] 中的 value。因此,您的排序没有开始。
k
的增量刚好在它应该在的循环之外。
您也不需要检查是否相等来确定要切换的元素。
package practice;
import java.util.*;
class bogosort
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("Caution this sorting could take hours if used more than 4 Numbers");
System.out.print("Enter the length to Sort: ");
int n;
n=sc.nextInt();
int a[]=new int[n],b[]=new int[n],i,j,f=0,p=0,k=0;
for (i=0;i<n;i++)
{
System.out.print("Enter the number " + (i+1) + ": ");
a[i]=sc.nextInt();
b[i]=-1;
}
while (p==0)
{
Random rand = new Random();
for (i=0;i<n;i++)
{
b[i]= rand.nextInt(n);// (int)Math.random()*10;
System.out.println("i: " + i + " b[" + i + "]: " + b[i]);
for (j=0;j<n;j++)
{
if (b[i]<b[j] && i!=j) // do check for equality here
{
// already in correct order
i--;
f=1;
break;
}
}
if (f==1)
{
f=0;
continue;
}
else {
System.out.println("swap element at " + i + " with element at " + b[i]);
// swap elements
int tmp = a[i];
a[i]=a[b[i]];
a[b[i]] = tmp;
}
k++;
}
p=1;
for (i=0;i<n-1;i++)
{
if (a[i]>a[i+1])
{
// not sorted yet
p=0;
break;
}
}
}
System.out.println("Sorted Array");
for (i=0;i<n;i++)
{
System.out.println(a[i]);
}
System.out.println("It took " + k + " turns");
}
}
$ java bogosort.java
Caution this sorting could take hours if used more than 4 Numbers
Enter the length to Sort: 3
Enter the number 1: 3
Enter the number 2: 2
Enter the number 3: 1
i: 0 b[0]: 0
swap element at 0 with element at 0
i: 1 b[1]: 0
swap element at 1 with element at 0
i: 2 b[2]: 2
swap element at 2 with element at 2
i: 0 b[0]: 0
i: 0 b[0]: 1
i: 0 b[0]: 1
i: 0 b[0]: 2
swap element at 0 with element at 2
i: 1 b[1]: 2
swap element at 1 with element at 2
i: 2 b[2]: 0
i: 2 b[2]: 1
i: 2 b[2]: 0
i: 2 b[2]: 2
swap element at 2 with element at 2
Sorted Array
1
2
3
It took 6 turns
$