1、有一个字符数组A[6]=“ABCDE”,把它的存储状态变为A[6]=“EDCBA”,不要另外用多的存储空间;
#include <stdio.h>
#include <string.h>
int main()
{
char buf[]="abcde";
int i = 0;
int j = strlen(buf);
for(i = 0;i<j/2;i++)
{
buf[i]^=buf[j-1];
buf[j-1]^=buf[i];
buf[i]^=buf[j-1];
j--;
}
buf[strlen(buf)]='\0';
printf("%s\n",buf);
return 0;
}
通过异或操作实现两个数的交换
2、有一个整型数组A[n]=[*,*,*,*,*,*],把奇数放在数组的前面,它的复杂度保证在O(n);
#include <stdio.h>
int main()
{
int a[]={1,3,4,3,5,6,8};
int i;
int j = 0;
int end = sizeof(a)/4;
j = end--;
int temp;
j--;
for(i=0;i!=j;)
{
if(a[i]%2==0)
i++;
else if(a[j]%2!=0)
j--;
else {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
printf("j = %d end = %d i=%d \n",j,end,i,a[i]);
}
for(i = 0;i<sizeof(a)/4; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
从前遍历找奇数,从后遍历找偶数,找到就互换位置,i==j结束