我需要创建一个执行基数排序的方法,该方法使用按位运算符(>>,<<,&,|)从值中检索单个位。
该文件看起来像这样:
0100
1
0011
110
0010
101
0001
11
0000
我目前已阅读该文件(其大小未知)。起初我以整数形式读取它们,但意识到我正在截断前导零。所以我将它们存储在String []中。
public static void readFile(String fileName) throws FileNotFoundException, IOException
{
File file = new File(fileName);
byte[] bytes = new byte[(int) file.length()];
try (FileInputStream fis = new FileInputStream(file))
{
fis.read(bytes);
}
String[] value = new String(bytes).split("\\s+");
numbers = new String[value.length];
System.arraycopy(value, 0, numbers, 0, value.length);
} // end of import file
这是我导入该文件的当前方法。我的所有其他方法都有效,除了基数排序,我不知道在按位运算方面从哪里开始。
我有关于排序如何工作的概念,但实施它似乎更具挑战性。
此致
麦克
答案 0 :(得分:0)
我会使用递归排序将数组分成3个新数组:下一个数字= 0的那个,下一个数字= 1的那个和没有下一个数字的那个。所以你的数字将按如下方式排序:
Input
0100
1
0011
110
0010
101
0001
11
0000
Step 1
Array "no next" (empty)
Array "next = 0"
0100
0011
0010
0001
0000
Array "next = 1"
1
110
101
11
Step 2 (only showing the array "next = 1")
Array "no next"
1
Array "next = 0"
101
Array "next = 1"
110
11
继续前进,直到获得0或1个大小的数组,以便知道它们已经排序。然后你会返回像Quicksort
中那样的返回排序数组