我正在寻找一种对数组的每个 N 元素进行排序的算法。
例如,数组为 7 8 6 4 5 1 4 3 5,N 为 3。
我希望排序后的数组为 6 7 8 1 4 5 3 4 5
请注意,数组大小是N的倍数。
我为 N==3 编写了以下算法,但不确定如何处理更高的 N 值
for ( ll i=0;i<N;i+=3)
{
if (A1[i]> A1[i+1])
{
swap(A1[i+1],A1[i]);
}
if(A1[i+1] > A1[i+2])
{
swap(A1[i+2],A1[i+1]);
}
}
使用 C++20 范围的强制解决方案:
#include <algorithm>
#include <iostream>
#include <ranges>
int main()
{
int arr[] = {7,8,6,4,5,1,4,3,5};
int n = 3;
for (auto &&segment : arr | std::views::chunk(n))
std::ranges::sort(segment);
for (int x : arr)
std::cout << x << ' ';
std::cout << '\n';
}
但是因为您可能会被要求手动实现这一点:创建一个排序函数(使用您想要的任何算法)来对整个数组进行排序。它可能会接受一个指针和一个长度作为参数(或两个指针)。然后,您可以将其应用于循环中的各个子数组。