C++ 排序算法,对数组的每 N 个元素进行排序

问题描述 投票:0回答:1

我正在寻找一种对数组的每个 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++ algorithm sorting
1个回答
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';
}

但是因为您可能会被要求手动实现这一点:创建一个排序函数(使用您想要的任何算法)来对整个数组进行排序。它可能会接受一个指针和一个长度作为参数(或两个指针)。然后,您可以将其应用于循环中的各个子数组。

© www.soinside.com 2019 - 2024. All rights reserved.