2012-11-12 148 views
0

我尝试使用java中的快速排序算法以字典顺序对Strings的数组进行排序。该阵列通过终端使用Scanner读入并保存在ArrayList中。这个ArrayList后来被转换为一个数组,我试着在其上应用快速排序算法。 我有两种方法:字典快速排序

private static void sortA(String[] s, int start, int end) { 
    if (end > start) { 
     int pivot = partition(s, start, end); 
     sortA(s, start, pivot - 1); 
     sortA(s, pivot + 1, end); 
    } 
} 

private static int partition(String[] s, int start, int end) { 
    String pivot = s[end]; 
    int left = start; 
    int right = end; 
    String temp = ""; 
    do { 
     while ((s[left].compareTo(pivot) <= 0) && (left < end)) 
      left++; 
     while ((s[right].compareTo(pivot) > 0) && (right > start)) 
      right--; 
     if (left < right) { 
      temp = s[left]; 
      s[left] = s[end]; 
      s[right] = temp; 
      printRow(s); 

     } 
    } while (left < right); 
    temp = s[left]; 
    s[left] = s[end]; 
    s[end] = temp; 
    return left; 
} 

代码似乎随机做工精细,然后突然没有。例如,阵列{"java", "application", "system"}可以很好地分类到{"application", "java", "system"}。数组{"library", "content", "bin"}排序为{"bin", "library", "contents"},这不是字典顺序。当然,电脑不会随机工作,所以我的代码一定有问题。我试图在纸上制定一个例子,但是我会发现一些完全错误的东西。但是,我基于快速排序实现了一个双数组排序实现,所以我不认为我犯了一个很大的推理错误。 在此先感谢。

回答

1

要拆分阵列中的错误的方式: 正确的分裂是“支点-1”,“转动”

sortA(s, start, pivot-1); 
sortA(s, pivot, end); 
+0

谢谢!它现在看起来很有效。我犯了这样一个愚蠢的错误......我尽快接受答案! –