Java 分区方法(快速排序算法)中的存储变量在做什么?

Java 分区方法(快速排序算法)中的存储变量在做什么?,java,quicksort,Java,Quicksort,我正在研究快速排序算法的简单实现 我在使用分区方法时遇到了问题。我重新命名了变量以帮助我理解。我了解大多数方法,但有一个变量的用途我不明白。这就是store变量 以下是我对该方法的看法: private int partition(int[] array, int startIndex, int endIndex) { int pivotIndex = getPivot(startIndex, endIndex); swapElements(array, piv

我正在研究快速排序算法的简单实现

我在使用分区方法时遇到了问题。我重新命名了变量以帮助我理解。我了解大多数方法,但有一个变量的用途我不明白。这就是
store
变量

以下是我对该方法的看法:

private int partition(int[] array, int startIndex, int endIndex) 
{
        int pivotIndex = getPivot(startIndex, endIndex);
        swapElements(array, pivotIndex, endIndex);

        pivotIndex = endIndex;
        int store = startIndex;

        for(int currentIndex = startIndex; (currentIndex <= endIndex - 1); currentIndex++) 
        {
            if(array[currentIndex] <= array[pivotIndex]) 
            {
                swapElements(array, currentIndex, store);
                store++;
            }
        }

        swapElements(array, store, pivotIndex);
        pivotIndex = store;
        return pivotIndex;
}
私有int分区(int[]数组、int startIndex、int endIndex)
{
int pivotinex=getPivot(startIndex,endIndex);
交换元素(数组、数据透视索引、结束索引);
pivotIndex=endIndex;
int store=startIndex;

对于(int currentIndex=startIndex;(currentIndex要回答您更简单的问题,您应该能够看到
store
在迭代过程中与
currentIndex
不保持相同。仅当
array[currentIndex]这是偶然的,但
(currentIndex Steve,我想你是对的,但是我要花一整天的时间来思考这个问题。我必须对它进行测试以确认你所说的话。谢谢你和你的帮助,Daly John。这就是打印语句可以成为你的朋友的地方。使用简单的输入,比如8-10项,每次迭代都打印一个数组nd所有索引值的值。我承认有一件事我不是很清楚。当它进行交换时,它会将一个值移回数组中,以便能够将刚刚测试的值移回数组中。我认为这个想法是该值已经被处理过,并且保证大于枢轴点,所以它会这样做esn去哪里并不重要,只要它在轴点之后,因为轴点就是它的来源,它总是被移动到更高的位置(你可能已经这样做了)这并不是对数组进行排序。它只是确保可以在枢轴处将数组分为两部分,并且一部分中的所有值都低于枢轴,而另一部分中的所有值都高于枢轴。随着部分越来越小,数组将被排序。关键是它永远不必移动所有值来腾出空间对于一个新值,因为它总是进行交换。这使得它最终比蛮力插入排序更快。在插入排序中,值可以被移动很多次,因为您不断地将所有值向上或向下移动一次,以便为新值腾出空间。我认为快速排序的问题是,到达sor的移动次数要少得多泰德阵列。