Sort elements of the array that occurs in between multiples of K
Last Updated :
25 Aug, 2022
Given an array arr[] and an integer K. The task is to sort the elements that are in between any two multiples of K.
Examples:
Input: arr[] = {2, 1, 13, 3, 7, 8, 21, 13, 12}, K = 2
Output: 2 1 3 7 13 8 13 21 12
The multiples of 2 in the array are 2, 8 and 12.
The elements that are in between the first two multiples of 2 are 1, 13, 3 and 7.
Hence, these elements in sorted order are 1, 3, 7 and 13.
Similarly, the elements between 8 and 12 in sorted order will be 13 and 21.
Input: arr[] = {11, 10, 9, 7, 4, 5, 12, 22, 13, 15, 17, 16}, K = 3
Output: 11 10 9 4 5 7 12 13 22 15 17 16
Approach: Traverse the array and keep track of the multiples of K, starting from the 2nd multiple of K sort every element between the current and the previous multiple of K. Print the updated array at the end.
Below is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
void printArr( int arr[], int n)
{
for ( int i = 0; i < n; i++)
cout << (arr[i]) << " " ;
}
void sortArr( int arr[], int n, int k)
{
int prev = -1;
for ( int i = 0; i < n; i++)
{
if (arr[i] % k == 0)
{
if (prev != -1)
sort(arr + prev + 1, arr + i);
prev = i;
}
}
printArr(arr, n);
}
int main()
{
int arr[] = {2, 1, 13, 3, 7,
8, 21, 13, 12};
int n = sizeof (arr) / sizeof (arr[0]);
int k = 2;
sortArr(arr, n, k);
}
|
Java
import java.util.Arrays;
class GFG {
static void printArr( int arr[], int n)
{
for ( int i = 0 ; i < n; i++)
System.out.print(arr[i] + " " );
}
static void sortArr( int arr[], int n, int k)
{
int prev = - 1 ;
for ( int i = 0 ; i < n; i++) {
if (arr[i] % k == 0 ) {
if (prev != - 1 )
Arrays.sort(arr, prev + 1 , i);
prev = i;
}
}
printArr(arr, n);
}
public static void main(String[] args)
{
int arr[] = { 2 , 1 , 13 , 3 , 7 , 8 , 21 , 13 , 12 };
int n = arr.length;
int k = 2 ;
sortArr(arr, n, k);
}
}
|
Python3
def printArr(arr, n) :
for i in range (n) :
print (arr[i], end = " " );
def sortArr(arr, n, k) :
prev = - 1 ;
for i in range (n) :
if (arr[i] % k = = 0 ) :
if (prev ! = - 1 ) :
temp = arr[prev + 1 :i];
temp.sort();
arr = arr[ : prev + 1 ] + temp + arr[i : ];
prev = i;
printArr(arr, n);
if __name__ = = "__main__" :
arr = [ 2 , 1 , 13 , 3 , 7 , 8 , 21 , 13 , 12 ];
n = len (arr);
k = 2 ;
sortArr(arr, n, k);
|
C#
using System.Collections;
using System;
class GFG {
static void printArr( int []arr, int n)
{
for ( int i = 0; i < n; i++)
Console.Write(arr[i] + " " );
}
static void sortArr( int []arr, int n, int k)
{
int prev = -1;
for ( int i = 0; i < n; i++) {
if (arr[i] % k == 0) {
if (prev != -1)
Array.Sort(arr, prev + 1, i-(prev + 1));
prev = i;
}
}
printArr(arr, n);
}
public static void Main(String []args)
{
int []arr = { 2, 1, 13, 3, 7, 8, 21, 13, 12 };
int n = arr.Length;
int k = 2;
sortArr(arr, n, k);
}
}
|
Javascript
<script>
function printArr(arr, n)
{
for ( var i = 0; i < n; i++)
document.write(arr[i] + " " );
}
function sortArr(arr, n, k)
{
var prev = -1;
for ( var i = 0; i < n; i++)
{
if (arr[i] % k == 0)
{
if (prev != -1)
var tmp = arr.slice(prev+1, i).sort((a,b)=> a-b);
for ( var j=prev+1; j< i; j++)
{
arr[j] = tmp[j-prev-1];
}
prev = i;
}
}
printArr(arr, n);
}
var arr = [2, 1, 13, 3, 7,
8, 21, 13, 12];
var n = arr.length;
var k = 2;
sortArr(arr, n, k);
</script>
|
Output:
2 1 3 7 13 8 13 21 12
Time Complexity: O(n2*log(n))
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...