Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 快速排序算法说明_Java_Algorithm_Quicksort - Fatal编程技术网

Java 快速排序算法说明

Java 快速排序算法说明,java,algorithm,quicksort,Java,Algorithm,Quicksort,我知道这是一个奇怪的问题,但我找到了这个用于快速排序算法的java代码: private static void quickSort (ArrayList <String> list, int first, int last){ int g = first; int h = last; int midIndex = (first + last) / 2; String dividingValue = list.ge

我知道这是一个奇怪的问题,但我找到了这个用于快速排序算法的java代码:

private static void quickSort (ArrayList <String> list, int first, int last){

        int g = first; 
        int h = last;

        int midIndex = (first + last) / 2;
        String dividingValue = list.get(midIndex);

        do{
            while (list.get(g).compareTo(dividingValue) < 0) g++;
            while (list.get(h).compareTo(dividingValue) > 0) h--;
            if (g <= h)
            {
                swap(list,g,h);
                g++;
                h--;
            }
        }

        while (g < h);

        if (h > first) quickSort (list,first,h);
        if (g < last) quickSort (list,g,last);      
    }

    private static void swap (ArrayList <String> list, int first, int h)
    {
        String temp = list.get(first);
        list.set(first, list.get(h));
        list.set(h, temp);
    }
私有静态void快速排序(ArrayList列表,int first,int last){
int g=第一;
int h=最后一个;
int midIndex=(第一个+最后一个)/2;
String dividingValue=list.get(midIndex);
做{
while(list.get(g).compareTo(dividingValue)<0)g++;
而(list.get(h).compareTo(dividingValue)>0)h--;
如果(g优先)快速排序(列表,第一,h);
如果(g
我可以工作,但对我来说没什么意义。有人能给我解释一下这个代码吗?
或者,如果可能的话,为快速排序提供一个更简单的代码?

我假设您知道快速排序的工作原理,并且只是想知道这个特定的实现。我还假设代码是正确的。我们首先定义我们正在处理的范围并选择一个轴心

private static void quickSort (ArrayList <String> list, int first, int last) {

    int g = first; 
    int h = last;

    int midIndex = (first + last) / 2;
    String dividingValue = list.get(midIndex);
我们继续这样做,直到到达轴心(由于轴心可以交换,所以稍微隐式)

}而(g
我们递归地将此属性应用于列表的子部分,以便对整个列表进行排序

    if (h > first) 
        quickSort(list, first, h);
    if (g < last) 
        quickSort(list, g, last);      
}

private static void swap (ArrayList <String> list, int first, int h)
{
    String temp = list.get(first);
    list.set(first, list.get(h));
    list.set(h, temp);
}
if(h>第一个)
快速排序(列表,第一,h);
如果(g
哪一部分对您没有意义?哪一部分需要解释?我建议通过评论你所理解的一切来进行解释。您还应该确保理解快速排序的概念。如果还有什么你不明白的地方,你可以问一个更具体的问题。你读了吗?对不起,我问得不准确,我只是对此感到有点沮丧。我了解了快速排序的原理,但我就是无法让这段代码有意义或找到其他任何东西。不管怎样,我认为它开始变得更有意义了。+1,所有细节都包括在内!谢谢!这确实有帮助:)
        if (g <= h)
        {
            swap(list, g, h);
            g++;
            h--;
        }
    } while (g < h);
    if (h > first) 
        quickSort(list, first, h);
    if (g < last) 
        quickSort(list, g, last);      
}

private static void swap (ArrayList <String> list, int first, int h)
{
    String temp = list.get(first);
    list.set(first, list.get(h));
    list.set(h, temp);
}