已知线性表按顺序存储,且每个元素都是不相同的整数型元素,设计把所有奇数移动到所有偶数前边的算法(要求时间最少,辅助空间少)。
void move(ElemType A[] ,int len) {
int i=0,j=len-1; //i表示左端偶数元素的下标,j表示右端奇数元素的下标
while(i<j) {
while(i<j&&A[i]%2!=0) i++; //从前向后找到一个偶数元素
while(i<j&&A[j]%2!=1) j--; //从后向前找到一个奇数元素
if (i<j)
{
swap(A[i],A[j]);
i++;
j--;
}
}
}
采用基于快速排序的划分思想来设计算法,只需遍历一次即可,其时间复杂度为O(n),空间复杂度为O(1).