下面是我很难理解的代码,基本上是Quicksort的迭代实现,它使用显式堆栈,我应该做三件事。
1:查找一个示例,其中堆栈中存储的对数等于Ω(n)。 2:找到一种方法来编辑此代码,以使此内存复杂度降低为O(log(n))。 3:确保在我进行编辑后,对其余元素进行排序的最后一位在每个元素的概率相同的情况下仍能做到。
我试图通读代码,并将其一一分解,但是我似乎仍然无法理解它的功能。
public void quicksort(int a[ ]) {
Stack<Pair <Integer ,Integer>> stack = new Stack<>();
stack.push(new Pair <Integer ,Integer> (1, a.length − 1));
int min = 0;
for(int i = 1; i < a.length; i++) if(a[i] < a[min])
min = i;
int t = a[0]; a[0] = a[min]; a[min] = t;
while(!stack.isempty()) {
Pair <Integer ,Integer> p = stack.pop();
int l = p.first(), r = p.second();
int i = l − 1, j = r , pivot = j;
do {
do { i++; } while(a[i] < a[pivot]);
do { j−−; } while(a[j] > a[pivot]);
t = a[i]; a[i] = a[j]; a[j] = t;
} while(i < j);
a[j] = a[i]; a[i] = a[r ]; a[r ] = t;
if(r − i > 1)
stack.push(new Pair <Integer ,Integer> (i + 1, r ));
if(i − l > 1)
stack.push(new Pair <Integer ,Integer> (l, i − 1));
}
}
非常感谢您的帮助,不便之处,敬请谅解!