矢量元素在分区算法中不交换
Vector elements are not swapped in partition algorithm.
问题来自《编程面试要素》(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;
}
void swapit(vector<T> v, int i, int j) { ... }
这不会修改您传入的向量。相反,它会为该函数创建一个副本。你可能想使用一个参考:
void swapit(vector<T> & v, int i, int j) { ... }
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- C++嵌套if语句,基本货币交换
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- shell排序中的交换和比较
- 为什么此代码上的排序算法不调用类的交换版本?
- 计数交换/比较合并排序算法的数字
- 每次交换后,如何使用任何排序算法打印到控制台
- 如何在快速排序算法中使已排序数组的交换次数为零
- 实现了用于滤波器设计的remez交换算法
- 排序算法的交换函数不适用于排序函数中的参数。
- 异或交换算法中运算符的未定义行为
- 矢量元素在分区算法中不交换
- K-表示算法C++,交换出点