将"for"循环更改为单个"for"循环(排序)
Changing twice "for" loop for single "for" loop (SORTING)
这是我在这里的第一篇文章。我必须对返回 True 或 False 的值进行排序。我的问题是,两个循环需要很长时间,但我无法将其更改为单循环。
下面是排序代码:
for (int i = 0; i < size; i++) {
if (f(arr[i]) == true) {
for(int j = 0; j < size; j++){
if(f(arr[j]) == false){
swap(arr[i],arr[j]);
}
}
}
这是功能:
bool isEven(int e) { return e%2 == 0; }
真正的 vaules 必须在数组中排在第一位,而假 vals 必须在右侧(左边的位置)。我必须摆脱这个内部循环。感谢您的帮助和建议。我不能制作任何新数组,这必须用循环数组 (arr[]) 来完成。
例如,对于数组:1,2,3,4,5,6 -> 2 4 6 1 5 3。
问题是,在那个内部循环中,即使你知道 [0, i] 中的所有元素都是假的,你也从 0 开始。所以我认为你可以这样做:
int i = 0;
int j = size - 1;
while (i < j) {
if (f(arr[i] == true) {
while (f[arr[j] == true && j > i) {
j -= 1;
}
swap(arr[i], arr[j]);
}
i += 1;
}
请注意,虽然上面看起来有 2 个循环,但每个元素只检查一次,因此运行时是 O(n),而不是您的原始解决方案是 O(n^2)。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- 为什么我的程序在for循环中k=0时返回垃圾值
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- C++-For循环未执行
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++ 无法在字符数组中使用 for 循环打印字母模式