为什么我的基数排序算法会返回部分排序的列表?

时间:2016-02-25 04:13:56

标签: java algorithm sorting

首先,我想指出此作业是作业 /但是/我不是在寻找直接答案,而是在提示关于为什么我的实施无效的一些见解

以下是给定的:我们提供了一个长度为7个字符的单词列表,并要求在使用队列时使用Radix排序算法对它们进行排序。

编辑1:更新代码

这是我的代码:

import java.util.*;
import java.io.File;

    public class RadixSort {

  public void radixSort() {
    ArrayList<LinkedQueue> arrayOfBins = new ArrayList<LinkedQueue>();
    LinkedQueue<String> masterQueue = new LinkedQueue<String>();
    LinkedQueue<String> studentQueue = new LinkedQueue<String>();

//Creating the bins
for (int i = 0; i < 26; i++) {
  arrayOfBins.add(new LinkedQueue<String>());
}
// Getting the file name and reading the lines from it
try {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the file name with its extension: ");
        File file = new File(input.nextLine());
        input = new Scanner(file);

        while (input.hasNextLine()) {
            String line = input.nextLine();
            masterQueue.enqueue(line);
        }
        input.close();

 } catch (Exception ex) {
       ex.printStackTrace();
 }


 for (int p = 6; p >= 0; p--) { 
    for (LinkedQueue queue : arrayOfBins) {
      queue.clear();
    }
    while (masterQueue.isEmpty() == false) {
        String s = (String) masterQueue.dequeue();
        char c = s.charAt(p);
        arrayOfBins.get(c-'a').enqueue(s);      
     }

      for (LinkedQueue queue : arrayOfBins) {
         studentQueue.append(queue);
      } 
 }

 masterQueue = studentQueue;

 System.out.println(masterQueue.size());
 System.out.println(masterQueue.dequeue());


}

public static void main(String [] args) {
  RadixSort sort = new RadixSort();
  sort.radixSort();
 }
}

1 个答案:

答案 0 :(得分:0)

我可以看到很多问题,我不确定你是怎么得到答案的。

  • 为什么你有两个嵌套的最外层循环,从0到6?
  • 你为什么不清楚studentQueue
  • j循环不会像你想象的那样多次执行。

除了明确的错误,程序不会输出任何内容 - 您只是在调试器中查看结果吗?你是否真的可以假设这些单词除了小写字母外不包含任何字符?