题目:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
要求:空间复杂度O(1),时间复杂度为O(n)。
我自己写了一下(之前写的那个不对,现在重写了,时间复杂度达到O(n))
void swap(int *a,int i,int j)
{
int tmp;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
void AdustArray(int *a,int n)
{
int i=0,j=n-1;
while(i<j)
{
if(a[i]%2==0 && a[j]%2!=0)//左偶右奇,直接交换,进入下一次循环
{
swap(a,i,j);
i++;
j--;
}
else if (a[i]%2==0 && a[j]%2==0)//左右都是偶数,右边数不交换,而是j--,判断前一个数
j--;
else if (a[i]%2!=0 && a[j]%2!=0)//左右都是奇数,左边数不加换,i++,判断下一个数
i++;
else
{
i++;
j++;
}
}
}
<