# 重新排列数组，使arr [i]等于i

“重新排列数组，使arr [i] = i”问题指出，您将获得一个范围从0到n-1的整数数组。 由于数组中可能未包含所有元素，因此-1代替了它们。 问题声明要求以这种方式重新排列数组，如果数组中不存在范围之间的数字，则将其标记为-1并将元素重新排列为arr [i] = i。

## 使用案列

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

## 重新排列数组以使arr [i]等于i的算法

```1. Traverse the array from 0 to n-1(length of the array).
2. Check if arr[i] is greater than equal to 0 and not equal to i.
1. Swap the elements by doing the following steps.
1. temp = arr[arr[i]]
2. arr[arr[i]] = arr[i]
3. arr[i] = temp
3. Else increase the value of i.
4. Print the array.```

## 实施

### 重新排列数组以使arr [i]等于i的C ++程序

```#include<iostream>

using namespace std;

void arrayRearrange(int arr[], int n)
{
for (int i = 0; i < n;)
{
if (arr[i] >= 0 && arr[i] != i)
{
int temp = arr[arr[i]];
arr[arr[i]] = arr[i];
arr[i] = temp;
}
else
{
i++;
}
}
for(int i = 0; i < n; i++)
cout<<arr[i]<<" ";
}
int main()
{
int arr[] = {9,4,-1,-1,2,7,8,1,5,-1};
int n = sizeof(arr)/sizeof(arr[0]);
arrayRearrange(arr,n);

return 0;
}
```
`-1 1 2 -1 4 5 -1 7 8 9`

### 重新排列数组以使arr [i]等于i的Java程序

```import java.util.Arrays;

class arrayRearrange
{
public static void main(String[] args)
{
int[] arr = {9,4,-1,-1,2,7,8,1,5,-1};
for (int i = 0; i < arr.length;)
{
if (arr[i] >= 0 && arr[i] != i)
{
int temp = arr[arr[i]];
arr[arr[i]] = arr[i];
arr[i] = temp;
}
else
{
i++;
}
}
System.out.println(Arrays.toString(arr));
}
}
```
`[-1, 1, 2, -1, 4, 5, -1, 7, 8, 9]`