【发布时间】:2013-10-09 18:39:45
【问题描述】:
我有一个 C++ 中的快速排序代码,它非常适用于一组非唯一元素。我相信这里很多人都知道,但是,谁知道呢?让我更好地解释一下自己。这是代码:
void quicksort(int a[], int first, int last){
int i,j;
int pivot;
if((last -first + 1) <= 1) return;
pivot = a[(first+last) / 2];
i = first;
j = last;
while(i <= j){
while(a[i] < pivot) i++;
while(a[j] > pivot) j--;
if(i <= j){
//SWAP
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
quicksort(a, first, j);
quicksort(a,i, last);
}
所以,我理解除了交换中的 if 之外的所有内容。谁能在数学上告诉我,在两个内部时间之后 i > j 的确切情况或一组情况是什么?我知道它的具体情况,但是它们发生的数学(或精确)属性是什么?
对不起,糟糕的英语,谢谢。
PD:请忽略这种情况下的优化,或者选择枢轴和所有这些东西。
【问题讨论】:
-
这看起来像 C 代码,而不是 C++?
-
我认为swap函数来自C++,不是吗?
-
在 C++ 中有
std::swap,但如果没有看到其余代码,很难知道这里使用的是什么交换实现。 -
我认为这不是严格意义上的 C 但还好,我编辑了标题,现在我们可以深入了解它了吗?
-
@PaulR 除了使用
swap()函数(假设它的std::swap())之外,这是同时具有良好C 和良好C++ 代码的示例。
标签: c++ duplicates quicksort elements