O(1)空间子数组换位算法

来源:互联网 发布:美容院用的软件 编辑:程序博客网 时间:2024/06/10 09:40
#include "iostream"#include "algorithm"using namespace std;//向前循环换位法//将数组a[0,k-1]与a[k,n-1]换位void forward(int a[], int n, int k){    for(int i=0; i<k; i++)    {        int temp = a[0];        for(int j=1; j<n; j++)            a[j-1] = a[j];        a[n-1] = temp;    }}//向后循环换位法//将数组a[0,k-1]与a[k,n-1]换位void backward(int a[], int n, int k){    for(int i=k; i<n; i++)    {        int temp = a[n-1];        for(int j=n-1; j>0; j--)            a[j] = a[j-1];        a[0] = temp;    }}//三次反转算法void exch(int a[], int n, int k){    reverse(a, a+k); //将a[0,k-1]逆序 [4,3,2,1,5,6,7,8,9]    reverse(a+k, a+n);  //将a[k,n-1]逆序[4,3,2,1,9,8,7,6,5]    reverse(a, a+n);  //将a[0,n-1]逆序[5,6,7,8,9,1,2,3,4]}void print(int a[], int n){    for(int i=0; i<n; i++)        cout << a[i] << " ";    cout << endl;}void init(int a[]){    for(int i=1; i<10; i++)        a[i-1] = i;}int main(){    int a[9];    int n = 9;    int k = 4;    init(a);    forward(a, n, k);    cout << "forward:\t";    print(a, n);    init(a);    backward(a, n, k);    cout << "backward:\t";    print(a, n);    init(a);    exch(a, n, k);    cout << "exch:\t\t";    print(a, n);    return 0;}

这里写图片描述

0 0
原创粉丝点击