📌  相关文章
📜  以交替的升序和降序打印数组元素

📅  最后修改于: 2021-04-21 21:51:41             🧑  作者: Mango

给定N个元素的数组。任务是按以下方式打印数组元素:前两个元素按升序排列,接下来的3个按降序排列,接下来的4个按升序排列,依此类推。

例子

来源:Oracle Interview经验集52

这个想法是使用2指针技术。首先以递增顺序对数组进行排序,并维护两个指针lr在哪里l是按升序打印数组,并且r以降序打印数组。保持变量K在迭代中指定要打印的元素数,并指定可变标志以在打印的升序和降序之间进行切换。

下面是上述方法的实现:

C++
// C++ program to print array elements in
// alternative increasing and decreasing
// order
  
#include 
using namespace std;
  
// Function to print array elements in
// alternative increasing and decreasing
// order
void printArray(int arr[], int n)
{
    // First sort the array in increasing order
    sort(arr, arr + n);
  
    int l = 0, r = n - 1, flag = 0, i;
  
    // start with 2 elements in
    // increasing order
    int k = 2;
  
    // till all the elements are not printed
    while (l <= r) {
        // printing the elements in
        // increasing order
        if (flag == 0) {
            for (i = l; i < l + k && i <= r; i++)
                cout << arr[i] << " ";
  
            flag = 1;
            l = i;
        }
        else // printing the elements in
        // decreasing order
        {
            for (i = r; i > r - k && i >= l; i--)
                cout << arr[i] << " ";
  
            flag = 0;
            r = i;
        }
  
        // increasing the number of elements
        // to printed in next iteration
        k++;
    }
}
  
// Driver Code
int main()
{
    int n = 6;
  
    int arr[] = { 1, 2, 3, 4, 5, 6 };
  
    printArray(arr, n);
  
    return 0;
}


Java
// Java program to print array elements in
// alternative increasing and decreasing
// order
import java.util.*;
class Solution
{
   
// Function to print array elements in
// alternative increasing and decreasing
// order
static void printArray(int arr[], int n)
{
    // First sort the array in increasing order
    Arrays.sort(arr);
   
    int l = 0, r = n - 1, flag = 0, i;
   
    // start with 2 elements in
    // increasing order
    int k = 2;
   
    // till all the elements are not printed
    while (l <= r) {
        // printing the elements in
        // increasing order
        if (flag == 0) {
            for (i = l; i < l + k && i <= r; i++)
                System.out.print(arr[i] + " ");
   
            flag = 1;
            l = i;
        }
        else // printing the elements in
        // decreasing order
        {
            for (i = r; i > r - k && i >= l; i--)
                System.out.print(arr[i] + " ");
   
            flag = 0;
            r = i;
        }
   
        // increasing the number of elements
        // to printed in next iteration
        k++;
    }
}
   
// Driver Code
public static void main(String args[])
{
    int n = 6;
   
    int arr[] = { 1, 2, 3, 4, 5, 6 };
   
    printArray(arr, n);
   
  
}
  
}
//contributed by Arnab Kundu


Python 3
# Python 3 program to print array elements 
# in alternative increasing and decreasing
# order
  
# Function to print array elements in
# alternative increasing and decreasing
# order
def printArray(arr, n):
  
    # First sort the array in
    # increasing order
    arr.sort()
  
    l = 0
    r = n - 1
    flag = 0
      
    # start with 2 elements in
    # increasing order
    k = 2
  
    # till all the elements are not printed
    while (l <= r) :
          
        # printing the elements in
        # increasing order
        if (flag == 0):
            i = l
            while i < l + k and i <= r:
                print(arr[i], end = " ")
                i += 1
  
            flag = 1
            l = i
          
        else:     # printing the elements in
                 # decreasing order
            i = r
            while i > r - k and i >= l:
                print(arr[i], end = " ")
                i -= 1
  
            flag = 0
            r = i
  
        # increasing the number of elements
        # to printed in next iteration
        k += 1
  
# Driver Code
if __name__ == "__main__":
      
    n = 6
    arr = [ 1, 2, 3, 4, 5, 6 ] 
    printArray(arr, n)
  
# This code is contributed by ita_c


C#
// C# program to print array elements in 
// alternative increasing and decreasing 
// order 
using System;
   
class GFG{
       
// Function to print array elements in 
// alternative increasing and decreasing 
// order 
static void printArray(int []arr, int n) 
{ 
      
    // First sort the array
    // in increasing order 
    Array.Sort(arr); 
   
    int l = 0, r = n - 1, flag = 0, i; 
   
    // start with 2 elements in 
    // increasing order 
    int k = 2; 
   
    // till all the elements
    // are not printed 
    while (l <= r) { 
          
        // printing the elements in 
        // increasing order 
        if (flag == 0) {
              
            for (i = l; i < l + k && i <= r; i++) 
                    Console.Write(arr[i] + " "); 
   
            flag = 1; 
            l = i; 
        } 
        else 
          
        // printing the elements in 
        // decreasing order 
        { 
            for (i = r; i > r - k && i >= l; i--) 
                Console.Write(arr[i] + " "); 
   
            flag = 0; 
            r = i; 
        } 
   
        // increasing the number of elements 
        // to printed in next iteration 
        k++; 
    } 
} 
   
// Driver Code 
static public void Main ()
{
           
    int n = 6; 
    int []arr = { 1, 2, 3, 4, 5, 6 }; 
    printArray(arr, n); 
  
} 
} 
  
// This code is contributed by Sach_Code


PHP
 $r - $k && 
                 $i >= $l; $i--) 
                echo $arr[$i] , " "; 
  
            $flag = 0; 
            $r = $i; 
        } 
  
        // increasing the number of elements 
        // to printed in next iteration 
        $k++; 
    } 
} 
  
// Driver Code 
$n = 6; 
$arr = array( 1, 2, 3, 4, 5, 6 ); 
  
printArray($arr, $n); 
  
// This code is contributed by jit_t
?>


输出:
1 2 6 5 4 3

时间复杂度: O(nlogn)