已知顺序表L中存放的是互不相同的整数,设计算法,将顺序表L中的所有奇数移到所有偶数(含0)前面
时间: 2024-09-20 08:10:30 浏览: 35
已知线性表按顺序存于内存,每个元素都是整数,试设计把所有值为负数的元素移到全部正数值元素前边的算法 .cpp
可以采用双指针法解决这个问题。我们创建两个指针,一个叫`odd_index`用于记录当前处理的奇数位置,另一个叫`even_index`表示偶数位置。初始时,`odd_index = 0`,`even_index = 1`。
以下是算法步骤:
1. 遍历顺序表`L`:
- 检查当前元素`L[even_index]`是否为偶数(即`L[even_index] % 2 == 0`),如果是,则直接移动到下一个偶数位置,`even_index++`;
- 如果不是偶数,说明找到了一个奇数,将`L[even_index]`与`L[odd_index]`交换,然后将`odd_index`向前移动一位,`odd_index++`。
2. 当`odd_index < even_index`时,遍历结束。这时,`L`的所有奇数都在前半部分,而偶数(包括0)在后半部分。
下面是伪代码形式:
```
for (int i = 0; i < L.length; i++) {
if (i == even_index && L[i] % 2 == 0) {
even_index++;
} else if (i == odd_index) { // 找到奇数
swap(L[odd_index], L[i]); // 交换
odd_index++;
}
}
```
阅读全文