代码之家  ›  专栏  ›  技术社区  ›  psaraj12

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

  •  0
  • psaraj12  · 技术社区  · 10 月前

    我正在寻找一种对数组中的每个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]);
        }
    }
    
    1 回复  |  直到 10 月前
        1
  •  6
  •   HolyBlackCat    10 月前

    使用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';
    }
    

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