📌  相关文章
📜  以相邻元素的绝对差的递增顺序对数组中的元素进行排序

📅  最后修改于: 2021-05-17 17:46:16             🧑  作者: Mango

给定一个数组arr [] ,任务就是以这样一种方式排列该数组,使得相邻元素之间的绝对差按递增顺序排列。
例子:

方法:想法是对数组的元素进行排序,然后取数组的中间元素,然后重复此步骤,直到数组不为空。下面是在示例的帮助下的方法说明:

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