`

数组重排(交叉排序)C++实现

 
阅读更多

题目:

a1 a2 a3 …… b1 b2 b3 ……

重排成 :

a1 b1 a2 b2 a3 b3 ……

(无升降序,元素可重复)

 

 

// Type your C++ code and click the "Run Code" button!
// Your code output will be shown on the left.
// Click on the "Show input" button to enter input data to be read (from stdin).

#include <iostream>
using namespace std;

// print array
void print_arr(int a[], int n) {
    for(int i = 0; i < n; i++) cout<<a[i]<<" ";
    cout<<endl;
}

// reverse array 
void reverse(int a[], int l, int h) {
    if(l>=h) return;
    int m = (l+h)/2;
    for(int i = l; i <= m; i++) swap(a[i], a[h-i+l]);
}

// rotate array partially
void rotate(int a[], int l, int m, int h) {
    if(l>=h) return;
    if(l>m) return;
    if(m>h) return;
    reverse(a, l, m-1);
    reverse(a, m, h);
    reverse(a, l, h);
}

// resort array by interval
// div means the start of the second array
void gap_sort(int a[], int n, int div) {
    if(n <= 2) return;
    
    int pre = 0;
    int cur = pre + 1;
    int a_end = div-1;
    
    while(cur != div) cur ++;
    pre ++;

    while(cur <= n-1 && pre <= a_end) {
        swap(a[pre], a[cur]);
        rotate(a, ++pre, cur, cur+1);
        pre += 3;
        cur += 2;
        a_end += 2;
    }
}

int main() {
    int arr[] = {0, 2, 4, 6, 8, 1, 3, 5, 7, 9};
    print_arr(arr, 10);
    gap_sort(arr, 10, 5);
    print_arr(arr, 10);
    return 0;
}

 

 欢迎关注微信公众号——计算机视觉:

分享到:
评论

相关推荐

    数据结构、算法与应用:C++语言描述(原书第2版)第二部分

    5.5 在一个数组中实现的多重表 5.6 性能测量 5.7 参考及推荐读物 第6章 线性表——链式描述 6.1 单向链表 6.1.1 描述 6.1.2 结构chainNode 6.1.3 类chain 6.1.4 抽象数据类型linearList的扩充 6.1.5 类extendedChain...

    数据结构C++描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构算法与应用(C++语言描述).rar

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    C++语言描述(PDF合集)

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构与算法:C++描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构 C++描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构算法与应用-C++语言描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构算法与应用-C C++语言描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构、算法与应用--C++语言描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构算法与应用-C++语言描述.rar

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角...

    数据结构算法与应用 很详细的,数据结构算法全集 这个是你想找的

    C++程序设计 1 1.1 引言 1 1.2 函数与参数 2 1.2.1 传值参数 2 1.2.2 模板函数 3 1.2.3 引用参数 3 1.2.4 常量引用参数 4 1.2.5 返回值 4 1.2.6 递归函数 5 1.3 动态存储分配 9 1.3.1...

    数据结构:堆栈

    3. **火车车厢重排**:堆栈可以辅助解决车厢重排问题,通过模拟车厢进出站台的过程来达到目标排序。 4. **电子布线问题**:在电子布线问题中,堆栈用于确定电路元件是否可以成功连接,避免线路交叉。 5. **离线等价...

    数据结构算法与应用-C__语言描述

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

    数据结构(C语言描述)

    4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 ...

Global site tag (gtag.js) - Google Analytics