我写了一个可以工作的快速排序程序。我需要包含一个计数器来计算迭代次数。在课堂上,我们讨论了算法,并得出结论,元素比较是基本操作。然而,我不知道应该把计数器放在哪里。我似乎不能得到正确的输出。我已经包含了我的代码,谢谢!
void partition( vector<int> & S, int low, int high, int & pivotpoint )
{
vector<int> U;
int pivotitem = S.at(low);
int j = low;
int i;
for( i = low + 1; i <= high; i++
我知道我们可以通过利用尾递归来优化快速排序,方法是删除1个以上的递归调用,并将其减少为一次递归调用: void quickSort(int arr[], int low, int high)
{
if (low < high)
{
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
void quickSort(int arr[], int low, int hig
在这两个算法中,你所做的就是把你的结构递归地一分为二,然后以正确的顺序构建你的结构,这样说对吗?
那么,有什么不同呢?
编辑:我找到了在快速排序中实现分区的以下算法,但我并不真正理解它是如何工作的,特别是使用(hi + low) >>> 1作为参数的swop行!有人能理解这一点吗?
private static int partition( int[] items, int lo, int hi )
{
int destination = lo;
swop( items, (hi + lo) >>> 1, hi );
// The