Java 快速排序测试仪调试

Java 快速排序测试仪调试,java,Java,对于快速排序,我有以下4种分区方法的代码。现在,如果我运行代码,各个分区的性能如下 分区0的性能是1877 第二分区是781 第3674条 第四分区大约是595 对于不同的机器和不同的时间,数字可能会有所不同。我现在无法分辨每个分区的bug,我有几个问题: 我注意到partition0和partition1之间的唯一区别是while循环的条件:one具有 我不是百分之百确定,但我相信这是因为“最后一个”和“第一个”用于检查左右索引是否满足要求。如果是这样,交换将不会发生,如果第一个和最后一个an

对于
快速排序
,我有以下4种分区方法的代码。现在,如果我运行代码,各个分区的性能如下

  • 分区0的性能是1877
  • 第二分区是781
  • 第3674条
  • 第四分区大约是595 对于不同的机器和不同的时间,数字可能会有所不同。我现在无法分辨每个分区的bug,我有几个问题:

  • 我注意到partition0和partition1之间的唯一区别是while循环的条件:one具有
  • 我不是百分之百确定,但我相信这是因为“最后一个”和“第一个”用于检查左右索引是否满足要求。如果是这样,交换将不会发生,如果第一个和最后一个ane相等,那么当它到达执行交换的If语句时,交换将不会发生

  • do while循环它就像一个while循环,区别在于它将始终执行1次,无论语句是真是假。然后,它将像正常的while循环一样执行块,这取决于为其设置的布尔条件

  • 有关执行while循环的更多信息:

    在代码中:

    do {
            // Search forward from left
            while (first < last && list[first].compareTo(pivot) <= 0)
                first++;
            // Search backward from right
            while (first <= last && list[last].compareTo(pivot) > 0)
                last--;
    
            // Swap two elements in the list
            if (last >= first) {
                swap(list, first, last);
                first++;
                last--;
            }
        } while (last > first);
    
    do{
    //从左向前搜索
    while(firstfirst);
    
    它将始终执行do first的内部,然后如果last>first,将继续执行,直到语句为false

    do {
            // Search forward from left
            while (first < last && list[first].compareTo(pivot) <= 0)
                first++;
            // Search backward from right
            while (first <= last && list[last].compareTo(pivot) > 0)
                last--;
    
            // Swap two elements in the list
            if (last >= first) {
                swap(list, first, last);
                first++;
                last--;
            }
        } while (last > first);