# Sort an array without changing position of negative numbers

In this article I'll explain approach to sort an array that contains negative numbers, without changing the postion of negative numbers. i.e We'll have to ignore negative numbers.

**Problem**

You are given an aray **arr [ ]** that contains, **N** integers. They are negative and non negative. Task is to leave negative numbers as it is and sort rest of the elements of array.

**Example**

**Input**

`arr[] = {2, -7, -19, 8, 4, 1}`

**Output**

`1 -7 -19 2 4 8`

**Explanation**

Here, you can see, we have left negative numbers -7 and -19 as their place and sorted other numbers.

**Solution**

Idea to solve this problem is to take all non negative numbers into a seperate **vector** and sort this vector. Then, replace all non-negative numbers of aaray with these sorted numbers.

Let's code ths approach.

```
#include <bits/stdc++.h>
using namespace std;
void sortArray(int a[], int n)
{
// Storing all non-negative values
vector<int> ans;
for (int i = 0; i < n; i++) {
if (a[i] >= 0)
ans.push_back(a[i]);
}
// Sorting non-negative values
sort(ans.begin(), ans.end());
int j = 0;
for (int i = 0; i < n; i++) {
// If current element is non-negative then
// update it such that all the
// non-negative values are sorted
if (a[i] >= 0) {
a[i] = ans[j];
j++;
}
}
// Print the sorted array
for (int i = 0; i < n; i++)
cout << a[i] << " ";
}
// Main functipm
int main()
{
int arr[] = { 2, -7, -19, 8, 4, 1 };
int n = sizeof(arr) / sizeof(arr[0]);
sortArray(arr, n);
return 0;
}
```

**Output**

`1 -7 -19 2 4 8`