用C语言实现数组前面是负数,后面是正数
时间: 2023-05-17 11:05:24 浏览: 192
可以使用双指针法,将数组分为左右两部分,左边存放负数,右边存放正数。具体实现如下:
void rearrange(int arr[], int n) {
int left = 0, right = n - 1;
while (left < right) {
while (left < right && arr[left] < 0) left++;
while (left < right && arr[right] >= 0) right--;
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
这个函数接受一个整数数组和数组长度作为参数,将数组中的负数移到数组前面,正数移到数组后面。
相关问题
c语言 在数组中 给负数后插入零
在C语言中,如果你有一个整型数组,并想要在给定的负数索引位置之后插入一个0,首先要确定数组的实际大小和插入的位置。因为数组索引是从0开始的,所以负数索引会指向数组结尾后的元素。例如,如果数组长度是`n`,你想在第`-i`个位置插入0,那么实际上是在第`n + i`个位置插入。
下面是一个简单的示例,假设我们有一个名为`arr`的数组:
```c
#include <stdio.h>
void insertZero(int arr[], int n, int index) {
// 检查索引是否越界
if (index < -n || index > 0) {
printf("Invalid index.\n");
return;
}
// 将数组元素向右移动
for (int i = n - 1; i >= index; i--) {
arr[i + 1] = arr[i];
}
// 在指定位置插入0
arr[index] = 0;
// 打印更新后的数组
for (int i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int index = -2; // 负数索引,实际为数组末尾后第二个位置
insertZero(arr, n, index);
return 0;
}
```
运行这个程序,你会看到0被成功插入到了数组的相应位置。注意,这里的`insertZero`函数仅处理了负数索引的情况,对于正数索引,你需要先检查并调整插入位置。
c语言取数组负数最大值
在C语言中,如果你想找到数组中所有元素的负数的最大值,可以采用遍历数组的方式,并通过一个变量记录当前已知的最大负数值。这里是一个简单的示例:
```c
#include <stdio.h>
#include <limits.h> // 引入整型限制宏
// 函数声明,寻找数组中负数的最大值
int find_max_negative(int arr[], int size);
int main() {
int arr[] = {-5, -10, 3, -8, 0, -6};
int array_size = sizeof(arr) / sizeof(arr[0]);
int max_negative = find_max_negative(arr, array_size);
printf("数组中最大的负数是: %d\n", max_negative);
return 0;
}
// 实现寻找负数最大值的函数
int find_max_negative(int arr[], int size) {
int max_neg = INT_MIN; // 初始化为最小整数,假设所有元素都是正数
for (int i = 0; i < size; i++) {
if (arr[i] < 0 && arr[i] > max_neg) { // 如果元素是负数并且比当前最大负数大
max_neg = arr[i]; // 更新最大负数
}
}
return max_neg;
}
```
在这个例子中,`find_max_negative`函数会遍历数组,每次遇到负数并更新`max_neg`变量,直到遍历完整个数组。最后返回的就是数组中最大的负数。
阅读全文