将一个整型数组调整为这样的数组:所有3的倍数在最左边,所有除以3余1的数在中间,而所有除以3余2的数在最右边。要求算法的时间尽可能少。 c++
时间: 2024-03-14 14:43:44 浏览: 37
基于c++关于数组算法剖析
可以使用三指针的方法,扫描数组一遍,将数组中所有3的倍数放到左边,所有除以3余1的数放到中间,所有除以3余2的数放到右边。具体实现可以参考下面的示例代码:
```c++
#include <iostream>
using namespace std;
// 将数组按照要求重新排列
void adjustArray(int* arr, int len)
{
int left = 0; // 左指针,指向3的倍数的最后一个元素
int right = len - 1; // 右指针,指向除以3余2的元素的第一个元素
int i = 0; // 中间指针,扫描数组
while(i <= right)
{
if(arr[i] % 3 == 0) // 如果当前元素是3的倍数
{
swap(arr[i], arr[left]); // 将其与左指针指向的元素交换
left++; // 左指针向右移动一位
i++; // 中间指针向右移动一位
}
else if(arr[i] % 3 == 1) // 如果当前元素除以3余1
{
i++; // 中间指针向右移动一位
}
else // 如果当前元素除以3余2
{
swap(arr[i], arr[right]); // 将其与右指针指向的元素交换
right--; // 右指针向左移动一位
}
}
}
int main()
{
int arr[] = {1, 6, 3, 2, 9, 12, 4, 5, 8}; // 定义一个整型数组
int len = sizeof(arr) / sizeof(int); // 计算数组长度
adjustArray(arr, len); // 调整数组
for(int i=0; i<len; i++) // 输出调整后的数组
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
在上面的示例代码中,我们定义了一个名为 `adjustArray` 的函数,该函数使用三指针的方法将数组按照要求重新排列。在 `main` 函数中,我们定义了一个整型数组 `arr`,并通过 `sizeof` 运算符计算出了数组的长度。然后,我们调用 `adjustArray` 函数对数组进行调整,并输出调整后的结果。
阅读全文