写一个函数move,实现将一个有n个元素组成的一维整型数组中所有小于0的元素移到所有大于0的元素前面。在上述定义的函数中,不允许增加新的数组,且要求使用指针对数组进行操作。函数原型为:void move(int *arr,int n);。
时间: 2024-05-08 17:21:26 浏览: 33
数组元素移动
4星 · 用户满意度95%
可以使用两个指针来实现这个功能,一个指针指向数组的开头,另一个指针从数组的末尾开始向前移动,每次交换两个指针所指向的元素,直到两个指针相遇。
具体实现如下:
```
void move(int *arr, int n) {
int *left = arr, *right = arr + n - 1;
while (left < right) {
while (*left < 0 && left < right) {
left++;
}
while (*right >= 0 && left < right) {
right--;
}
if (left < right) {
int tmp = *left;
*left = *right;
*right = tmp;
}
}
}
```
首先定义两个指针left和right,分别指向数组的开头和末尾。然后循环执行以下操作:
1. left指针从左向右移动,直到找到第一个大于等于0的元素。
2. right指针从右向左移动,直到找到第一个小于0的元素。
3. 如果left指针还在right指针的左边,说明还有需要交换的元素,交换left和right指针所指向的元素。
4. 重复执行上述步骤,直到left指针和right指针相遇。
最后,数组中所有小于0的元素就被移到了所有大于0的元素前面。
阅读全文