给定一个数组arr [] ,任务就是以这样一种方式排列该数组,使得相邻元素之间的绝对差按递增顺序排列。
例子:
Input: arr[] = {8, 1, 2, 3, 0}
Output: 2 3 1 8 0
Explanation:
|2-3| = 1, |3-1| = 2, |1-8| = 7, |8-0| = 8
The absolute difference between the adjacent element is in increasing order
Input: -1 -2 3 4 5
Output: 3 4 -1 5 -2
Explanation:
|3-4| = 1, |4-(-1)| = 5, |-1-5| = 6, |5-(-2)| = 7
方法:想法是对数组的元素进行排序,然后取数组的中间元素,然后重复此步骤,直到数组不为空。下面是在示例的帮助下的方法说明:
Given Array be - {8, 1, 2, 3, 0}
After Sorting the array - {0, 1, 2, 3, 8}
Array Middle Ele Output Array
--------------- ------------- ---------------
{0, 1, 2, 3, 8} 5//2 = 2, 2 2
{0, 1, 3, 8} 4//2 = 2, 3 2, 3
{0, 1, 8} 3//2 = 1, 1 1, 2, 3
{0, 8} 2//2 = 1, 8 1, 2, 3, 8
{0} 1//2 = 0, 0 1, 2, 3, 8, 0
C++
// C++ implementation to sort
// the elements of the array in
// such a way that absolute
// difference between the adjacent
// elements are in increasing order
#include
using namespace std;
// Function to sort the elements
// of the array by difference
void sortDiff(vector arr,
int n)
{
// Sorting the array
sort(arr.begin(), arr.end());
// Array to store the
// elements of the array
vector out;
// Iterating over the length
// of the array to include
// each middle element of array
while(n > 0)
{
// Appending the middle
// element of the array
out.push_back(arr[n / 2]);
arr.erase(arr.begin() + n / 2);
n = n - 1;
}
for(auto i : out)
cout << i << " ";
}
// Driver Code
int main()
{
vector a = {8, 1, 2, 3, 0};
int n = 5;
sortDiff(a, n);
}
// This code is contributed by Chitranayal
Java
// Java implementation to sort
// the elements of the array in
// such a way that absolute
// difference between the adjacent
// elements are in increasing order
import java.util.*;
class GFG{
// Function to sort the elements
// of the array by difference
static void sortDiff(Vector arr, int n)
{
// Sorting the array
Collections.sort(arr);
// Array to store the
// elements of the array
Vector out = new Vector();
// Iterating over the length
// of the array to include
// each middle element of array
while(n > 0)
{
// Appending the middle
// element of the array
out.add(arr.get(n / 2));
arr.remove(n / 2);
n = n - 1;
}
for(int i : out)
System.out.print(i + " ");
}
// Driver Code
public static void main(String[] args)
{
Integer []a = { 8, 1, 2, 3, 0 };
Vector arr = new Vector(Arrays.asList(a));
int n = 5;
sortDiff(arr, n);
}
}
// This code is contributed by 29AjayKumar
Python3
# Python implementation to sort
# the elements of the array in
# such a way that absolute
# difference between the adjacent
# elements are in increasing order
# Function to sort the elements
# of the array by difference
def sortDiff(arr, n):
# Sorting the array
arr.sort()
# Array to store the
# elements of the array
out = []
# Iterating over the length
# of the array to include
# each middle element of array
while n:
# Appending the middle
# element of the array
out.append(arr.pop(n//2))
n=n-1
print(*out)
return out
# Driver Code
if __name__ == "__main__":
arr = [8, 1, 2, 3, 0]
n = 5
sortDiff(arr, n)
C#
// C# implementation to sort
// the elements of the array in
// such a way that absolute
// difference between the adjacent
// elements are in increasing order
using System;
using System.Collections.Generic;
class GFG{
// Function to sort the elements
// of the array by difference
static void sortDiff(List arr, int n)
{
// Sorting the array
arr.Sort();
// Array to store the
// elements of the array
List Out = new List();
// Iterating over the length
// of the array to include
// each middle element of array
while(n > 0)
{
// Appending the middle
// element of the array
Out.Add(arr[n / 2]);
arr.RemoveAt(n / 2);
n = n - 1;
}
foreach(int i in Out)
Console.Write(i + " ");
}
// Driver Code
public static void Main(String[] args)
{
int []a = { 8, 1, 2, 3, 0 };
List arr = new List(a);
int n = 5;
sortDiff(arr, n);
}
}
// This code is contributed by sapnasingh4991
输出:
2 3 1 8 0