Given an array a[ ] and the number of adjacent swap operations allowed are K. The task is to find the max number that can be formed using these swap operations.
Examples:
Input : a[]={ 1, 2, 9, 8, 1, 4, 9, 9, 9 }, K = 4
Output : 9 8 1 2 1 4 9 9 9
After 1st swap a[ ] becomes 1 9 2 8 1 4 9 9 9
After 2nd swap a[ ] becomes 9 1 2 8 1 4 9 9 9
After 3rd swap a[ ] becomes 9 1 8 2 1 4 9 9 9
After 4th swap a[ ] becomes 9 8 1 2 1 4 9 9 9Input : a[]={2, 5, 8, 7, 9}, K = 2
Output : 8 2 5 7 9
Approach:
- Starting from the first digit, check for the next K digits and store the index of the largest number.
 - Bring that greatest digit to the top by swapping the adjacent digits.
 - Reduce to the value of K by the number of adjacent swaps done.
 - Repeat the above steps until the number of swaps becomes zero.
 
Below is the implementation of the above approach
C++
// C++ implementation of the above approach#include <bits/stdc++.h>using namespace std;// Function to print the// elements of the arrayvoid print(int arr[], int n){    for (int i = 0; i < n; i++) {        cout << arr[i] << " ";    }    cout << endl;}// Exchange array elements one by// one from  right to left side// starting from the current position// and ending at the target positionvoid swapMax(int* arr, int target_position,                      int current_position){    int aux = 0;    for (int i = current_position;         i > target_position; i--) {        aux = arr[i - 1];        arr[i - 1] = arr[i];        arr[i] = aux;    }}// Function to return the// maximum number arrayvoid maximizeArray(int* arr,                   int length, int swaps){    // Base condition    if (swaps == 0)        return;    // Start from the first index    for (int i = 0; i < length; i++) {        int max_index = 0, max = INT_MIN;        // Search for the next K elements        int limit = (swaps + i) > length ?                         length : swaps + i;        // Find index of the maximum        // element in next K elements        for (int j = i; j <= limit; j++) {            if (arr[j] > max) {                max = arr[j];                max_index = j;            }        }        // Update the value of        // number of swaps        swaps -= (max_index - i);        // Update the array elements by        // swapping adjacent elements        swapMax(arr, i, max_index);        if (swaps == 0)            break;    }}// Driver codeint main(){    int arr[] = { 1, 2, 9, 8, 1, 4, 9, 9, 9 };    int length = sizeof(arr) / sizeof(int);    int swaps = 4;    maximizeArray(arr, length, swaps);    print(arr, length);    return 0;} | 
Java
// Java implementation of the above approachclass GFG{// Function to print the// elements of the arraystatic void print(int arr[], int n){    for (int i = 0; i < n; i++)    {        System.out.print(arr[i] + " ");    }    System.out.println();}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionstatic void swapMax(int[] arr, int target_position,                    int current_position){    int aux = 0;    for (int i = current_position;        i > target_position; i--)     {        aux = arr[i - 1];        arr[i - 1] = arr[i];        arr[i] = aux;    }}// Function to return the// maximum number arraystatic void maximizeArray(int[] arr,                int length, int swaps){    // Base condition    if (swaps == 0)        return;    // Start from the first index    for (int i = 0; i < length; i++)     {        int max_index = 0, max = Integer.MIN_VALUE;        // Search for the next K elements        int limit = (swaps + i) > length ?                         length : swaps + i;        // Find index of the maximum        // element in next K elements        for (int j = i; j <= limit; j++)         {            if (arr[j] > max)             {                max = arr[j];                max_index = j;            }        }        // Update the value of        // number of swaps        swaps -= (max_index - i);        // Update the array elements by        // swapping adjacent elements        swapMax(arr, i, max_index);        if (swaps == 0)            break;    }}// Driver codepublic static void main(String[] args) {    int arr[] = { 1, 2, 9, 8, 1, 4, 9, 9, 9 };    int length = arr.length;    int swaps = 4;    maximizeArray(arr, length, swaps);    print(arr, length);}}/* This code is contributed by PrinciRaj1992 */ | 
Python3
# Python3 implementation of the above approach import sys# Function to print the # elements of the array def print_ele(arr, n) :         for i in range(n) :        print(arr[i],end=" ");              print(); # Exchange array elements one by # one from right to left side # starting from the current position # and ending at the target position def swapMax(arr, target_position,                     current_position) :                             aux = 0;     for i in range(current_position, target_position,-1) :        aux = arr[i - 1];         arr[i - 1] = arr[i];         arr[i] = aux; # Function to return the # maximum number array def maximizeArray(arr, length, swaps) :     # Base condition     if (swaps == 0) :        return;     # Start from the first index     for i in range(length) :        max_index = 0; max = -(sys.maxsize-1);                 # Search for the next K elements        if (swaps + i) > length :            limit = length        else:            limit = swaps + i                     # Find index of the maximum        # element in next K elements        for j in range(i, limit + 1) :            if (arr[j] > max) :                max = arr[j];                max_index = j;                         # Update the value of        # number of swaps        swaps -= (max_index - i);         # Update the array elements by         # swapping adjacent elements         swapMax(arr, i, max_index);         if (swaps == 0) :            break; # Driver code if __name__ == "__main__" :     arr = [ 1, 2, 9, 8, 1, 4, 9, 9, 9 ];     length = len(arr);     swaps = 4;     maximizeArray(arr, length, swaps);     print_ele(arr, length); # This code is contributed by AnkitRai01 | 
C#
// C# program to find the sum // and product of k smallest and // k largest prime numbers in an array using System;     class GFG{// Function to print the// elements of the arraystatic void print(int []arr, int n){    for (int i = 0; i < n; i++)    {        Console.Write(arr[i] + " ");    }    Console.WriteLine();}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionstatic void swapMax(int[] arr, int target_position,                    int current_position){    int aux = 0;    for (int i = current_position;        i > target_position; i--)     {        aux = arr[i - 1];        arr[i - 1] = arr[i];        arr[i] = aux;    }}// Function to return the// maximum number arraystatic void maximizeArray(int[] arr,                int length, int swaps){    // Base condition    if (swaps == 0)        return;    // Start from the first index    for (int i = 0; i < length; i++)     {        int max_index = 0, max = int.MinValue;        // Search for the next K elements        int limit = (swaps + i) > length ?                         length : swaps + i;        // Find index of the maximum        // element in next K elements        for (int j = i; j <= limit; j++)         {            if (arr[j] > max)             {                max = arr[j];                max_index = j;            }        }        // Update the value of        // number of swaps        swaps -= (max_index - i);        // Update the array elements by        // swapping adjacent elements        swapMax(arr, i, max_index);        if (swaps == 0)            break;    }}// Driver codepublic static void Main(String[] args) {    int []arr = { 1, 2, 9, 8, 1, 4, 9, 9, 9 };    int length = arr.Length;    int swaps = 4;    maximizeArray(arr, length, swaps);    print(arr, length);}}/* This code is contributed by PrinciRaj1992 */ | 
Javascript
<script>// JavaScript implementation of the above approach// Function to print the// elements of the arrayfunction print(arr, n) {    for (let i = 0; i < n; i++) {        document.write(arr[i] + " ");    }    document.write("<br>");}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionfunction swapMax(arr, target_position, current_position) {    let aux = 0;    for (let i = current_position; i > target_position; i--) {        aux = arr[i - 1];        arr[i - 1] = arr[i];        arr[i] = aux;    }}// Function to return the// maximum number arrayfunction maximizeArray(arr, length, swaps) {    // Base condition    if (swaps == 0)        return;    // Start from the first index    for (let i = 0; i < length; i++) {        let max_index = 0, max = Number.MIN_SAFE_INTEGER;        // Search for the next K elements        let limit = (swaps + i) > length ?            length : swaps + i;        // Find index of the maximum        // element in next K elements        for (let j = i; j <= limit; j++) {            if (arr[j] > max) {                max = arr[j];                max_index = j;            }        }        // Update the value of        // number of swaps        swaps -= (max_index - i);        // Update the array elements by        // swapping adjacent elements        swapMax(arr, i, max_index);        if (swaps == 0)            break;    }}// Driver codelet arr = [1, 2, 9, 8, 1, 4, 9, 9, 9];let length = arr.length;let swaps = 4;maximizeArray(arr, length, swaps);print(arr, length);// This code is contributed by gfgking</script> | 
9 8 1 2 1 4 9 9 9
Time Complexity: O(N*N) where N is the length of given array.
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
