在工作笔试时经常会碰到这个问题:一个数组序列,一半为奇数,一半为偶数,重新排列使得所有奇数位于奇数下标上,所有偶数位于偶数下标上。
这个问题在了解了快速排序算法后很容易得出答案,其实就是快速排序算法得前半部分。用两个变量even_i,odd_i分别遍历数组中下标为偶数和奇数得数,当Array[even_i]为奇数并且Array[odd_i]为偶数时就交换。代码如下;
void sort(int Array[])
{
int even_i=0;
int odd_i=0;
while(odd_i<n&&even_i<n)
{
while(odd_i<n&&a[odd_i]%2==1)
odd_i+=2;
while(even_i<n&&a[even_i]%2==0)
even_i+=2;
if(odd_i<n&&even_i<n)
{
swap(a[odd_i],a[even_i]);
odd_i+=2;
even_i+=2;
}
}
}
在vc6.0调试成功。 |