📌  相关文章
📜  使用三重交换对N的递减排列进行排序

📅  最后修改于: 2021-05-04 10:41:14             🧑  作者: Mango

给定一个由N个数字的递减排列组成的数组A [] ,任务是使用三重交换对数组进行排序。如果无法对数组进行排序,则打印-1。

例子:

方法:

为了解决上述问题,我们必须以这种方式选择三个索引,以便我们可以将至少一个元素放在正确的位置。这样,我们的意思是必须在索引0处带1,在索引1处带2,依此类推。

  1. 选择x作为当前索引编号i,
  2. 选择z作为x + 1的索引,该索引始终为N – i – 1,并且
  3. 相应地选择y。

然后,我们必须使用这些索引通过元素的循环右移来执行元素交换。

下面是上述方法的实现:

C++
// C++ implementation to sort
// decreasing permutation of N
// using triple swaps
  
#include 
using namespace std;
  
// Function to sort Array
void sortArray(int A[], int N)
{
  
    // The three indices that
    // has to be chosen
    int x, y, z;
  
    // Check if possible to sort array
    if (N % 4 == 0 || N % 4 == 1) {
  
        // Swapping to bring element
        // at required position
        // Bringing at least one
        // element at correct position
        for (int i = 0; i < N / 2; i++) {
  
            x = i;
            if (i % 2 == 0) {
  
                y = N - i - 2;
                z = N - i - 1;
            }
  
            // Tracing changes in Array
            A[z] = A[y];
            A[y] = A[x];
            A[x] = x + 1;
        }
  
        // Print the sorted array
        cout << "Sorted Array: ";
  
        for (int i = 0; i < N; i++)
  
            cout << A[i] << " ";
    }
  
    // If not possible to sort
    else
  
        cout << "-1";
}
  
// Driver code
int main()
{
  
    int A[] = { 5, 4, 3, 2, 1 };
  
    int N = sizeof(A) / sizeof(A[0]);
  
    sortArray(A, N);
  
    return 0;
}


Java
// Java implementation to sort
// decreasing permutation of N
// using triple swaps
  
class GFG{
  
// Function to sort array
static void sortArray(int A[], int N)
{
  
    // The three indices that
    // has to be chosen
    int x = 0, y = 0, z = 0;
  
    // Check if possible to sort array
    if (N % 4 == 0 || N % 4 == 1)
    {
  
        // Swapping to bring element
        // at required position
        // Bringing at least one
        // element at correct position
        for(int i = 0; i < N / 2; i++)
        {
           x = i;
             
           if (i % 2 == 0)
           {
               y = N - i - 2;
               z = N - i - 1;
           }
             
           // Tracing changes in array
           A[z] = A[y];
           A[y] = A[x];
           A[x] = x + 1;
        }
          
        // Print the sorted array
        System.out.print("Sorted Array: ");
  
        for(int i = 0; i < N; i++)
           System.out.print(A[i] + " ");
    }
  
    // If not possible to sort
    else
    {
        System.out.print("-1");
    }
}
  
// Driver code
public static void main(String[] args)
{
  
    int A[] = { 5, 4, 3, 2, 1 };
    int N = A.length;
  
    sortArray(A, N);
}
}
  
// This code is contributed by sapnasingh4991


Python3
# Python3 implementation to sort 
# decreasing permutation of N 
# using triple swaps 
  
# Function to sort array 
def sortArray(A, N):
      
    # Check if possible to sort array 
    if (N % 4 == 0 or N % 4 == 1): 
  
        # Swapping to bring element 
        # at required position 
        # Bringing at least one 
        # element at correct position 
        for i in range(N // 2): 
            x = i
            if (i % 2 == 0): 
                y = N - i - 2
                z = N - i - 1
  
            # Tracing changes in Array 
            A[z] = A[y] 
            A[y] = A[x] 
            A[x] = x + 1
  
        # Print the sorted array 
        print("Sorted Array: ", end = "") 
  
        for i in range(N): 
            print(A[i], end = " ") 
  
    # If not possible to sort 
    else:
        print("-1")
          
# Driver code 
A = [ 5, 4, 3, 2, 1 ] 
N = len(A) 
  
sortArray(A, N)
  
# This code is contributed by yatinagg


C#
// C# implementation to sort
// decreasing permutation of N
// using triple swaps
using System;
class GFG{
  
// Function to sort array
static void sortArray(int []A, int N)
{
  
    // The three indices that
    // has to be chosen
    int x = 0, y = 0, z = 0;
  
    // Check if possible to sort array
    if (N % 4 == 0 || N % 4 == 1)
    {
  
        // Swapping to bring element
        // at required position
        // Bringing at least one
        // element at correct position
        for(int i = 0; i < N / 2; i++)
        {
            x = i;
                  
            if (i % 2 == 0)
            {
                y = N - i - 2;
                z = N - i - 1;
            }
                  
            // Tracing changes in array
            A[z] = A[y];
            A[y] = A[x];
            A[x] = x + 1;
        }
          
        // Print the sorted array
        Console.Write("Sorted Array: ");
  
        for(int i = 0; i < N; i++)
        Console.Write(A[i] + " ");
    }
  
    // If not possible to sort
    else
    {
        Console.Write("-1");
    }
}
  
// Driver code
public static void Main(String[] args)
{
    int []A = { 5, 4, 3, 2, 1 };
    int N = A.Length;
  
    sortArray(A, N);
}
}
  
// This code is contributed by sapnasingh4991


输出:
Sorted Array: 1 2 3 4 5