Sort elements of array whose modulo with K yields P
Given an array of integers and a number K. The task is to sort only those elements of the array which yields remainder P upon division by K . Sorting must be done at their relative positions only without affecting any other elements.
Examples:
Input : arr[] = {10, 3, 2, 6, 12}, K = 4, P = 2
Output : 2 3 6 10 12
Input : arr[] = {3, 4, 5, 10, 11, 1}, K = 3, P = 1
Output : 3 1 5 4 11 10
Approach:
- Initialise two empty vectors.
- Traverse the array, from left to right and check modulo of each element with K.
- In first vector, insert the index of all elements which yields remainder P.
- In second vector, insert the elements which yields remainder P.
- Sort the second vector.
- Now, we have the index of all required elements and also all of the required elements in sorted order.
- So, insert the elements of the second vector into the array at the indices present in first vector one by one.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void sortWithRemainderP( int arr[], int n, int k, int p)
{
vector< int > v1, v2;
for ( int i = 0; i < n; i++) {
if (arr[i] % k == p) {
v1.push_back(i);
v2.push_back(arr[i]);
}
}
sort(v2.begin(), v2.end());
for ( int i = 0; i < v1.size(); i++)
arr[v1[i]] = v2[i];
for ( int i = 0; i < n; i++)
cout << arr[i] << " " ;
}
int main()
{
int arr[] = { 8, 255, 16, 2, 4, 0 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 2;
int p = 0;
sortWithRemainderP(arr, n, k, p);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void sortWithRemainderP( int arr[], int n, int k, int p)
{
Vector<Integer> v1 = new Vector<Integer>();
Vector<Integer> v2 = new Vector<Integer>();
for ( int i = 0 ; i < n; i++)
{
if (arr[i] % k == p)
{
v1.add(i);
v2.add(arr[i]);
}
}
Collections.sort(v2);
for ( int i = 0 ; i < v1.size(); i++)
arr[v1.get(i)] = v2.get(i);
for ( int i = 0 ; i < n; i++)
System.out.print(arr[i]+ " " );
}
public static void main(String[] args)
{
int arr[] = { 8 , 255 , 16 , 2 , 4 , 0 };
int n = arr.length;
int k = 2 ;
int p = 0 ;
sortWithRemainderP(arr, n, k, p);
}
}
|
Python3
def sortWithRemainderP(arr, n, k, p):
v1 = []
v2 = []
for i in range ( 0 , n, 1 ):
if (arr[i] % k = = p):
v1.append(i)
v2.append(arr[i])
v2.sort(reverse = False )
for i in range ( 0 , len (v1), 1 ):
arr[v1[i]] = v2[i]
for i in range ( 0 , n, 1 ):
print (arr[i], end = " " )
if __name__ = = '__main__' :
arr = [ 8 , 255 , 16 , 2 , 4 , 0 ]
n = len (arr)
k = 2
p = 0
sortWithRemainderP(arr, n, k, p)
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static void sortWithRemainderP( int []arr, int n,
int k, int p)
{
List< int > v1 = new List< int >();
List< int > v2 = new List< int >();
for ( int i = 0; i < n; i++)
{
if (arr[i] % k == p)
{
v1.Add(i);
v2.Add(arr[i]);
}
}
v2.Sort();
for ( int i = 0; i < v1.Count; i++)
arr[v1[i]] = v2[i];
for ( int i = 0; i < n; i++)
Console.Write(arr[i] + " " );
}
public static void Main(String[] args)
{
int []arr = { 8, 255, 16, 2, 4, 0 };
int n = arr.Length;
int k = 2;
int p = 0;
sortWithRemainderP(arr, n, k, p);
}
}
|
PHP
<?php
function sortWithRemainderP( $arr , $n , $k , $p )
{
$v1 = array ();
$v2 = array ();
for ( $i = 0; $i < $n ; $i ++)
{
if ( $arr [ $i ] % $k == $p )
{
array_push ( $v1 , $i );
array_push ( $v2 , $arr [ $i ]);
}
}
sort( $v2 );
for ( $i = 0; $i < count ( $v1 ); $i ++)
$arr [ $v1 [ $i ]] = $v2 [ $i ];
for ( $i = 0; $i < $n ; $i ++)
echo $arr [ $i ] . " " ;
}
$arr = array ( 8, 255, 16, 2, 4, 0 );
$n = count ( $arr );
$k = 2;
$p = 0;
sortWithRemainderP( $arr , $n , $k , $p );
?>
|
Javascript
<script>
function sortWithRemainderP(arr, n, k, p)
{
var v1 = [], v2 = [];
for ( var i = 0; i < n; i++) {
if (arr[i] % k == p) {
v1.push(i);
v2.push(arr[i]);
}
}
v2.sort((a,b)=> a-b)
for ( var i = 0; i < v1.length; i++)
arr[v1[i]] = v2[i];
for ( var i = 0; i < n; i++)
document.write( arr[i] + " " );
}
var arr = [8, 255, 16, 2, 4, 0 ];
var n = arr.length;
var k = 2;
var p = 0;
sortWithRemainderP(arr, n, k, p);
</script>
|
Time Complexity: O(nlogn)
Last Updated :
08 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...