已知顺序表L中的数据元素类型为int。设计算法将其调整为左右两部分,左边的元素(即排在前面的)均为奇数,右边所有元素(即排在后面的)均为偶数,并要求算法的时间复杂度为O(n),空间复杂度为O(1)。
快速排序的方法,把奇数偶数分到两边
struct _seqlist{
ElemType elem[MAXSIZE];
int last;
};
typedef struct _seqlist SeqList;
void odd_even(SeqList* L)
{
ElemType demo = L->elem[0];
int i = 1, tmp, j = 0;
for (; i < L->last; i++) {
j = i;
if (L->elem[i] % 2 != 0) {//交换顺序
tmp = L->elem[i];
L->elem[i] = demo;
demo = tmp;
i = j;
}
}
}