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;
}
返回第一个索引;
}

每次运行未排序的数组时,它都可以正常工作。然而,我的测试人员给了我一个断言错误。任何帮助都将不胜感激。

我尝试了这个示例,并对代码进行了一些小的更改,以使其易于运行。我尝试在不同的排序数组中作为输入,但没有看到太明显的内容。您知道它失败了哪些输入吗

你的密码在哪
您可以尝试修改输入以查看其失败的地方吗?

我尝试了这个示例,并对代码进行了一些小的更改以使其易于运行。我尝试在不同的排序数组中作为输入,但没有看到太明显的内容。您知道它失败了哪些输入吗

你的密码在哪
您能否尝试修改输入以查看其失败的地方?

如果您可以分享您看到的实际错误,这将非常有帮助。请访问并阅读。如果您能分享您看到的实际错误,将非常有帮助。请访问并阅读。