Рубрики

Сортировать массив без изменения положения отрицательных чисел

Учитывая массив arr [] из N целых чисел, задача состоит в том, чтобы отсортировать массив без изменения позиции отрицательных чисел (если они есть), то есть отрицательные числа не нужно сортировать.

Примеры:

Input: arr[] = {2, -6, -3, 8, 4, 1}
Output: 1 -6 -3 2 4 8

Input: arr[] = {-2, -6, -3, -8, 4, 1}
Output: -2 -6 -3 -8 1 4

Подход: сохранить все неотрицательные элементы массива в другом векторе и отсортировать этот вектор. Теперь замените все неотрицательные значения в исходном массиве этими отсортированными значениями.

Ниже приведена реализация вышеуказанного подхода:

C ++

// C ++ реализация подхода
#include <bits/stdc++.h>

using namespace std;

  
// Функция для сортировки массива так, что
// отрицательные значения не влияют

void sortArray(int a[], int n)

{

  

    // Сохраняем все неотрицательные значения

    vector<int> ans;

    for (int i = 0; i < n; i++) {

        if (a[i] >= 0)

            ans.push_back(a[i]);

    }

  

    // Сортировка неотрицательных значений

    sort(ans.begin(), ans.end());

  

    int j = 0;

    for (int i = 0; i < n; i++) {

  

        // Если текущий элемент неотрицательный, то

        // обновить его так, чтобы все

        // неотрицательные значения отсортированы

        if (a[i] >= 0) {

            a[i] = ans[j];

            j++;

        }

    }

  

    // Распечатать отсортированный массив

    for (int i = 0; i < n; i++)

        cout << a[i] << " ";

}

  
// Код драйвера

int main()

{

    int arr[] = { 2, -6, -3, 8, 4, 1 };

  

    int n = sizeof(arr) / sizeof(arr[0]);

  

    sortArray(arr, n);

  

    return 0;

}

Джава

// Java реализация подхода

import java.util.*;

  

class GFG 

{

  
// Функция для сортировки массива так, что
// отрицательные значения не влияют

static void sortArray(int a[], int n)

{

  

    // Сохраняем все неотрицательные значения

    Vector<Integer> ans = new Vector<>();

    for (int i = 0; i < n; i++)

    {

        if (a[i] >= 0)

            ans.add(a[i]);

    }

  

    // Сортировка неотрицательных значений

    Collections.sort(ans);

  

    int j = 0;

    for (int i = 0; i < n; i++)

    {

  

        // Если текущий элемент неотрицательный, то

        // обновить его так, чтобы все

        // неотрицательные значения отсортированы

        if (a[i] >= 0

        {

            a[i] = ans.get(j);

            j++;

        }

    }

  

    // Распечатать отсортированный массив

    for (int i = 0; i < n; i++)

        System.out.print(a[i] + " ");

}

  
// Код драйвера

public static void main(String[] args) 

{

    int arr[] = { 2, -6, -3, 8, 4, 1 };

  

    int n = arr.length;

  

    sortArray(arr, n);

}
}

  
// Этот код предоставлен 29AjayKumar

python3

# Python3 реализация подхода

  
# Функция для сортировки массива так, что
# отрицательные значения не влияют

def sortArray(a, n):

  

    # Хранить все неотрицательные значения

    ans=[]

    for i in range(n):

        if (a[i] >= 0):

            ans.append(a[i])

  

    # Сортировать неотрицательные значения

    ans = sorted(ans)

  

    j = 0

    for i in range(n):

  

        # Если текущий элемент неотрицательный, то

        # обновить его так, чтобы все

        # неотрицательные значения отсортированы

        if (a[i] >= 0):

            a[i] = ans[j]

            j += 1

  

    # Распечатать отсортированный массив

    for i in range(n):

        print(a[i],end = " ")

  

  
# Код драйвера

  

arr = [2, -6, -3, 8, 4, 1]

  

n = len(arr)

  
sortArray(arr, n)

  
# Этот код предоставлен mohit kumar 29

C #

// C # реализация вышеуказанного подхода

using System.Collections.Generic;

using System;

  

class GFG 

{

  
// Функция для сортировки массива так, что
// отрицательные значения не влияют

static void sortArray(int []a, int n)

{

  

    // Сохраняем все неотрицательные значения

    List<int> ans = new List<int>();

    for (int i = 0; i < n; i++)

    {

        if (a[i] >= 0)

            ans.Add(a[i]);

    }

  

    // Сортировка неотрицательных значений

    ans.Sort();

  

    int j = 0;

    for (int i = 0; i < n; i++)

    {

  

        // Если текущий элемент неотрицательный, то

        // обновить его так, чтобы все

        // неотрицательные значения отсортированы

        if (a[i] >= 0) 

        {

            a[i] = ans[j];

            j++;

        }

    }

  

    // Распечатать отсортированный массив

    for (int i = 0; i < n; i++)

        Console.Write(a[i] + " ");

}

  
// Код драйвера

public static void Main(String[] args) 

{

    int []arr = { 2, -6, -3, 8, 4, 1 };

  

    int n = arr.Length;

  

    sortArray(arr, n);

}
}

  
// Этот код предоставлен 29AjayKumar

Выход:

1 -6 -3 2 4 8

Рекомендуемые посты:

Сортировать массив без изменения положения отрицательных чисел

0.00 (0%) 0 votes