使用C++语言,设计一个算法对n个实数组成的数组进行重新排序,使 得其中所有负元素都位于正元素之前。这个算法要兼顾空 间效率和时间效率
时间: 2023-05-27 07:02:53 浏览: 141
可以采用双指针法,从数组左右两端开始,左指针指向第一个元素,右指针指向最后一个元素。当左指针指向正数,右指针指向负数时,交换两个数的位置,直到左右指针相遇。代码如下:
```
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sortBySign(int arr[], int n) {
int left = 0, right = n - 1;
while (left < right) {
while (arr[left] < 0 && left < right) { // 左指针找到第一个正数
left++;
}
while (arr[right] >= 0 && left < right) { // 右指针找到第一个负数
right--;
}
if (left < right) { // 交换左右指针指向的元素
swap(&arr[left], &arr[right]);
left++;
right--;
}
}
}
int main() {
int arr[] = {-1, 2, 3, -4, 5, -6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
sortBySign(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
阅读全文
相关推荐

















