您的位置:首页 > 其它

调整数组顺序使奇数位于偶数前面

2016-05-08 20:08 423 查看
第一种:
开辟一个一样大小的数组,遍历原数组的数据,把原数组奇数依次存放在新数组的前面,偶数存放在后面。
时间复杂度:O(n^2);
空间复杂度:O(n)
缺陷:效率太差
#include<stdio.h>
#include<stdlib.h>
void Adjust(int* src,int* des,int n)
{
int index=0;
for(int j=0;j<n;j++)
{
if(src[j]%2)
{
des[index]=src[j];
index++;
}
}
for(int j=0;j<n;j++)
{
if(!(src[j]%2))
{
des[index]=src[j];
index++;
}
}

}
void test()
{
int a1[10]={2,4,4,66,76,86,20,10,24,18};
int a2[10]={1,3,5,35,15,13,17,19,17,21};
int a3[10]={1,2,5,36,16,13,17,19,14,21};
int a[10];
Adjust(a3,a,sizeof(a3)/sizeof(a3[0]));
for(int i=0;i<sizeof(a3)/sizeof(a3[0]);i++)
{
printf("%d ",a3[i]);
}
printf("\n");
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d ",a[i]);
}
}
int main()
{
test();
system("pause");
return 0;
}
结果:



第二种:
利用两个指针,一个指向数组开始,一个指向数组末尾,指向数组开始的那个指针依次向后遍历,找到偶数立即停下来,指向数组末尾的那个指针向前遍历,找到奇数停下来,判断start<=end,,交换两个值。
#include<stdio.h>
#include<stdlib.h>
bool Check(int num)
{
return num%2;
}
void swap(int* a,int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
void Adjust(int* a,int n)
{
int start=0;
int end=n-1;
while(start<=end)
{
while(Check(a[start])&&start<=end)
{
start++;
}
while(!(Check(a[end]))&&start<=end)
{
end--;
}
if(start<end)
{
swap(&a[start],&a[end]);
}
}

}
void test()
{
int a1[10]={2,4,4,66,76,86,20,10,24,18};
int a2[10]={1,3,5,35,15,13,17,19,17,21};
int a3[10]={1,2,5,36,16,13,17,19,14,21};
Adjust(a1,sizeof(a1)/sizeof(a1[0]));
for(int i=0;i<sizeof(a1)/sizeof(a1[0]);i++)
{
printf("%d ",a1[i]);
}
printf("\n");
Adjust(a2,sizeof(a2)/sizeof(a2[0]));
for(int i=0;i<sizeof(a2)/sizeof(a2[0]);i++)
{
printf("%d ",a2[i]);
}
printf("\n");
Adjust(a3,sizeof(a3)/sizeof(a3[0]));
for(int i=0;i<sizeof(a3)/sizeof(a3[0]);i++)
{
printf("%d ",a3[i]);
}
}
int main()
{
test();
system("pause");
return 0;
}
结果:



本文出自 “liveyoung” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: