C++ 矢量元素在分区算法中不交换。
问题来源于《编程访谈》一书(2012年)。 问题6.1第53页:“编写一个函数,将数组a(我使用向量)和索引I转换为a,并重新排列元素,使所有小于a[I]的元素首先出现,然后是等于a[I]的元素,然后是大于a[I]的元素。您的算法应具有O(1)空间复杂度和O(| a |)时间复杂度 我的代码对向量没有任何作用C++ 矢量元素在分区算法中不交换。,c++,algorithm,vector,C++,Algorithm,Vector,问题来源于《编程访谈》一书(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 <typenam
#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;
}
#包括
#包括
使用名称空间std;
模板
虚空swapit(向量v,整数i,整数j)
{
温度;
温度=v[i];
v[i]=v[j];
v[j]=温度;
}
模板
void dutch_flag_分区(向量&v,int数据透视索引)
{
T pivot=v[数据透视索引];
整数下限=0;
int等于0;
int大于等于v.size()-1;
而(等于void swapit(向量v,int i,int j){…}
这不会修改传入的向量。相反,它会为此函数创建一个副本。您可能希望使用引用:
void swapit(vector<T> & v, int i, int j) { ... }
void swapit(向量&v,inti,intj){…}
我认为您只需要在swapit函数中通过引用传递向量。非常感谢您,比尔!
void swapit(vector<T> & v, int i, int j) { ... }