C語言陣列旋轉的反轉演算法程式


演算法是一組按順序執行的指令,用於解決給定的問題。在這裡,我們將討論陣列旋轉的反轉演算法,併為反轉演算法建立一個程式。

現在,讓我們瞭解一些解決此問題所需的術語 -

陣列 - 儲存相同資料型別元素的容器。陣列的大小(元素數量)在陣列宣告時固定。

陣列旋轉 - 旋轉陣列是更改陣列元素的順序。將元素的索引增加 1,並將最後一個元素的索引更改為 0,依此類推。

陣列旋轉示例,

Array[] = {3, 6, 8,1, 4, 10}
Rotated 2 times gives,
Array[] = {4, 10, 3, 6, 8, 1, 4}

反轉演算法

陣列旋轉的一種演算法是反轉演算法。在此演算法中,建立子陣列並反轉以執行陣列的旋轉。建立子陣列,分別旋轉,然後連線在一起並反轉以獲得旋轉後的陣列。

演算法

Input : array arr[] , positions that are needed to be rotated r , length of array n.
Step 1: Split the array into two sub arrays of 0 - (d-1) and d - (n-1) size, a1 [d] and a2[n-d];
Step 2: Reverse both arrays using the reverse method.
Step 3: Join a1 and a2 back to get an array of original size.
Step 4: Reverse this joined array to get the rotated array.
Step 5: Print the array using the standard output method.

示例,

arr[] = {1 ,4, 2, 8, 3, 6, 5}, d = 3, n = 7
a1[]  = {1,4,2} ; a2 = {8,3,6,5}
a1r[] = {2,4,1} // reversed a1
a2r[] = {5,6,3,8} // reversed a2
ar[]  = {2,4,1,5,6,3,8} // a1r+a2r
arr[] = {8,3,6,5,1,4,2} // final answer.

示例

 線上演示

#include <stdio.h>
void reverse(int arr[], int start, int end){
   int temp;
   while (start < end) {
      temp = arr[start];
      arr[start] = arr[end];
      arr[end] = temp;
      start++;
      end--;
   }
}
int main(){
   int arr[] = { 54, 67, 12, 76, 25, 16, 34 };
   int n = 7;
   int d = 2;
   printf("The initial array is :
");    for (int i = 0; i < n; i++)       printf("%d ", arr[i]);    reverse(arr, 0, d - 1);    reverse(arr, d, n - 1);    reverse(arr, 0, n - 1);    printf("
The left reversed array by %d elements is:
",d);    for (int i = 0; i < n; i++)       printf("%d ", arr[i]);    return 0; }

輸出

The initial array is :
54 67 12 76 25 16 34
The left reversed array by 2 elements is:
12 76 25 16 34 54 67

更新於: 2019年9月19日

2K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告