设计一个算法对n个实数组成的数组重新排列,使负元素都位于正元素之前
时间: 2024-12-25 09:31:08 浏览: 8
设计这样一个算法可以采用简单的两步排序策略。首先,将数组分为两个部分:一个包含所有负数,另一个包含所有非负数(即正数和零)。然后,将这两个部分分别进行排序。以下是这个过程的伪代码描述:
1. **分隔负数和非负数**:
- 初始化两个空数组,`negatives` 和 `non_negatives`。
- 遍历输入数组 `arr`,对于每个元素 `num`:
- 如果 `num` < 0,将其添加到 `negatives` 中;
- 否则,添加到 `non_negatives` 中。
2. **分别排序**:
- 对于 `negatives` 数组,使用任意一种排序算法(如快速排序、归并排序等),确保其按升序排列(因为我们要保证负数靠前)。
- 对于 `non_negatives` 数组,同样进行排序,由于我们知道它们是非负的,所以只需保持顺序即可(一般不需要额外排序)。
3. **合并结果**:
- 将 `negatives` 数组连接到 `non_negatives` 的前面,形成最终的有序数组。
**Python 示例**:
```python
def sort_negatives_first(arr):
negatives = [num for num in arr if num < 0]
non_negatives = [num for num in arr if num >= 0]
# 对负数数组进行排序
negatives.sort()
# 结合两个部分
sorted_arr = negatives + non_negatives
return sorted_arr
# 使用示例
input_array = [-5, 2, 0, -1, 4, -3]
sorted_array = sort_negatives_first(input_array)
```
阅读全文