在C ++中以交替的升序和降序打印数组元素

在此问题中,我们给了一个数字数组,并且在打印时必须以交替的升序和降序打印该数组的元素。替代顺序将是这样的方式,即第一个两个元素按递增顺序排列,然后接下来的三个元素按递减顺序排列,接下来的四个元素按递增顺序排列。

让我们举个例子来更好地理解问题,

Input  : {1, 4, 0, 2, 7, 9, 3}

Output : 0 1 9 7 4 2 3

解释-元素按升序排列的数组是0 1 2 3 4 7 9.前2个元素是01。后3个元素是9 74。接下来的4个元素是2 3(我们可以取4个元素,但是在那里数组中只有2个)。

为了解决这个问题,我们将首先对数组进行升序排序。现在,我们将使用两个指针,一个指针从头开始打印元素,一个指针从头开始打印元素。我们还将使用一个标志元素来检查是否要从头开始或从头开始打印。

算法

Step 1 : Sort elements of the array.

Step 2 : Initialise left = 0 , right = n-1 , flag = 2.

Step 3 : while l is less than equal to r. Do :

Step 4 : If flag%2 == 0. Do :

   Step 4.1 : loop from i = left to left + flag. And print arr[i].

   Step 4.2 : update left = i ; flag ++;

Step 5 : else. Do :

   Step 5.1 : loop from i = right to right - flag. And print arr[i].

   Step 5.2 : update right = i and flag ++.

Step 6 : EXIT

示例

现在,让我们创建一个程序来说明该算法的工作原理。

#include <bits/stdc++.h>

using namespace std;

void printAlternateSeq(int arr[], int n){

   sort(arr, arr + n);

   int left = 0, right = n - 1, flag = 2, i;

   while (left <= right) {

      if (flag%2 == 0) {

         for (i = left; i < left + flag && i <= right; i++)

         cout<<arr[i]<<" ";

         left = i;

      } else {

         for (i = right; i > right - flag && i >= left; i--)

            cout<<arr[i]<<" ";

         right = i;

      }

      flag++;

   }

}

int main(){

   int n = 6;

   int arr[] = {23, 45, 78, 32, 89, 10 };

   printAlternateSeq(arr, n);

   return 0;

}

输出结果

10 23 89 78 45 32

以上是 在C ++中以交替的升序和降序打印数组元素 的全部内容, 来源链接: utcz.com/z/347374.html

回到顶部