向量元素在分区算法中不交换。
Posted
技术标签:
【中文标题】向量元素在分区算法中不交换。【英文标题】:Vector elements are not swapped in partition algorithm. 【发布时间】:2016-01-07 22:15:45 【问题描述】:问题来自《编程面试要素》(2012 年)。 问题 6.1 第 53 页:“编写一个函数,将数组 A(我使用向量)和索引 i 放入 A,并重新排列元素,使所有小于 A[i] 的元素首先出现,然后是等于 A[ i],后跟大于 A[i] 的元素。你的算法应该有 O(1) 的空间复杂度和 O(|A|) 的时间复杂度。
我的代码对向量没有任何作用。
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void swapit(vector<T> v, int i, int j)
T temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
template <typename T>
void dutch_flag_partition(vector<T> &v, int pivotindex)
T pivot = v[pivotindex];
int lower = 0;
int equals = 0;
int larger = v.size() - 1;
while(equals <= larger)
cout << equals << " " << larger<< endl;
if(v[equals] < pivot)
swapit(v, lower++, equals++);
else if(v[equals] == pivot)
++equals;
else
swapit(v, equals, larger--);
int main()
int arr[] = 1,11,3,5,3,10,0,22,50,33,4,22,23,100,9;
vector<int> v (arr, arr + sizeof(arr)/sizeof(arr[0]));
dutch_flag_partition(v, 5);
for(int i = 0; i < v.size(); ++i)
cout << v[i] << " ";
cout << endl;
return 0;
【问题讨论】:
我认为你只需要在你的 swapit 函数中通过引用传递向量。 【参考方案1】:void swapit(vector<T> v, int i, int j) ...
这不会修改您传入的向量。相反,它会为此函数创建一个副本。您可能想使用参考:
void swapit(vector<T> & v, int i, int j) ...
【讨论】:
以上是关于向量元素在分区算法中不交换。的主要内容,如果未能解决你的问题,请参考以下文章
在迭代算法中使用 Rcpp 加速替换列表和向量的元素是不是合法?
:内存管理 -- 内存空间的扩充(覆盖技术交换技术)连续分配管理方式(单一连续分配(系统区/用户区)固定分区分配动态分区分配)动态分区分配算法