Java 排序数组的快速排序
这是我的快速排序算法的代码实现;但是,它不适用于排序数组。有什么问题吗Java 排序数组的快速排序,java,quicksort,Java,Quicksort,这是我的快速排序算法的代码实现;但是,它不适用于排序数组。有什么问题吗 public void insertionSort(ArrayList<String> data, int firstIndex, int numberToSort) { if (firstIndex + numberToSort > data.size()) System.out.println("Index is larger then the date size
public void insertionSort(ArrayList<String> data, int firstIndex,
int numberToSort) {
if (firstIndex + numberToSort > data.size())
System.out.println("Index is larger then the date size");
else {
for (int i = 1; i < numberToSort; i++) {
for (int j = 0; j < i; j++) {
if (data.get(firstIndex + j).compareTo(
data.get(firstIndex + i)) > 0)
Collections.swap(data, firstIndex + i, firstIndex + j);
}
}
}
}
@Override
public void quickSort(ArrayList<String> data, int firstIndex,
int numberToSort) {
if (firstIndex + numberToSort > data.size())
System.out.println("Index is larger then the date size");
else {
if (numberToSort <= 16)
insertionSort(data, firstIndex, numberToSort);
else {
int idx = partition(data, firstIndex, numberToSort);
int leftSeg = idx - firstIndex;
int rightSeg = numberToSort - leftSeg - 1;
quickSort(data, firstIndex, leftSeg);
quickSort(data, idx + 1, rightSeg); // This is where I get an error
}
}
}
@Override
public int partition(ArrayList<String> data, int firstIndex,
int numberToPartition) {
String pivot = data.get(firstIndex);
int TooBigNdx = firstIndex + 1;
int TooSmallNdx = firstIndex + numberToPartition - 1;
while (TooBigNdx < TooSmallNdx) {
while (TooBigNdx < TooSmallNdx
&& data.get(TooBigNdx).compareTo(pivot) <= 0)
TooBigNdx++;
while (TooSmallNdx > firstIndex
&& data.get(TooSmallNdx).compareTo(pivot) > 0)
TooSmallNdx--;
if (TooBigNdx < TooSmallNdx)
Collections.swap(data, TooBigNdx, TooSmallNdx);
}
if (pivot.compareTo(data.get(TooSmallNdx)) >= 0) {
Collections.swap(data, firstIndex, TooSmallNdx);
return TooSmallNdx;
}
return firstIndex;
}
public void insertionSort(ArrayList数据,int firstIndex,
整数(排序){
if(firstIndex+numberToSort>data.size())
System.out.println(“索引大于日期大小”);
否则{
for(int i=1;i0)
集合.交换(数据,firstIndex+i,firstIndex+j);
}
}
}
}
@凌驾
公共void快速排序(ArrayList数据、int firstIndex、,
整数(排序){
if(firstIndex+numberToSort>data.size())
System.out.println(“索引大于日期大小”);
否则{
如果(数字排序0)
Toosmalndx--;
if(Toobingndx=0){
集合.swap(数据、firstIndex、TooSmallNdx);
返回smallndx;
}
返回第一个索引;
}
每次运行未排序的数组时,它都可以正常工作。然而,我的测试人员给了我一个断言错误。任何帮助都将不胜感激。我尝试了这个示例,并对代码进行了一些小的更改,以使其易于运行。我尝试在不同的排序数组中作为输入,但没有看到太明显的内容。您知道它失败了哪些输入吗 你的密码在哪
您可以尝试修改输入以查看其失败的地方吗?我尝试了这个示例,并对代码进行了一些小的更改以使其易于运行。我尝试在不同的排序数组中作为输入,但没有看到太明显的内容。您知道它失败了哪些输入吗 你的密码在哪
您能否尝试修改输入以查看其失败的地方?如果您可以分享您看到的实际错误,这将非常有帮助。请访问并阅读。如果您能分享您看到的实际错误,将非常有帮助。请访问并阅读。