1. 程式人生 > >O(1)空間子陣列換位演算法

O(1)空間子陣列換位演算法

#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; }

這裡寫圖片描述