数据结构习题)设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求算法时间复杂度为O(n))
时间: 2024-10-06 20:02:19 浏览: 56
python练习题 :用户任意输入10个整数到列表中,然后由大到小排列并输出。
这个数据结构问题可以使用两个指针法来解决,其中一个指向数组的开始,另一个指向数组的结束。我们依次遍历数组:
1. 首先初始化两个指针i(正数区边界)和j(负数区边界),初始值都为0。
2. 当i < j时,说明还有未处理的元素:
a. 检查A[i]是否为正数,如果是,则不变动i位置,继续检查下一个元素。
b. 如果A[i]为负数,交换A[i]和A[j],然后j减一,因为找到了一个负数并放到正确的位置。
c. 继续比较A[i+1]和A[j],直到找到一个正数或i >= j。
3. 当i >= j时,遍历结束,所有正数都在前半部分,负数在后半部分。
以下是伪代码形式:
```
for i = 0 to n-1 do
if A[i] > 0 then
// 正数不需要移动,直接i++
else
// 找到一个负数,将其与A[j]交换
swap(A[i], A[j])
j--
end if
end for
```
这个算法的时间复杂度确实是线性的,即O(n),因为它只遍历了数组一次。
阅读全文