考研数据结构(每日一题)
题目:已知线性表按顺序存储,且每个元素都是不相同的整数型元素,设计所有奇数移动到所有偶数前面的算法。
算法思想:
使用快速排序思想,假设表为L[1…n],先从前向后找到一个偶数元素L(i),再从后向前找到一个奇数元素L(j),将二者交换,重复上述操作直到i大于j。
完整代码:
void move(ElemType A[],int len){
int i = 0; //i表示左端偶数元素的下标
int j = len - 1; //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 --;
}
}
}