一个数组奇数在左排序,偶数在右,c语言将数组中的奇数偶数分别排序
NC77调整数组顺序,使奇数排在偶数之前(1)
本文描述了一个长度为N整数数组,并实现了一个函数来调整数组中数字的顺序,使所有奇数位于数组的前部,所有偶数位于数组的后部,奇数与奇数、偶数与偶数之间的相对位置保持不变。
数据区域:数组中每个数字的值。
需求:时间复杂度,空间复杂度
高级:时间复杂性,空间复杂性
示例1输入:
[1,2,3,4]返回值:
[1,3,2,4]例2输入:
[2,4,6,5,7]返回值:
[5,7,2,4,6]例3输入:
[1,3,5,6,7]返回值:
[1,3,5,7,6]原位暴力置换法的思考:
从0到n遍历整个数组,遇到奇数时向前移动奇数,记录奇数个数。
代码如下:
#包含位/标准数据。h
使用命名空间std
Voidshift (vector int v,int left,int right)//将v[right]放入v[left]中,并将v[left,right-1]向右移动。
{
if (left==right)
{
返回;
}
int k=v[right];
while(右/左)
{
v[右]=v[右-1];
右-;
}
v[left]=k;
}
向量整型数组(向量整型数组)
{
int len=0;//用来记录奇数的个数,作为以后棋步的起始位置。
for(int k=0;k array . size();k)
{
if (array[k] % 2==1)
{
shift(array,len,k);
len
}
}
返回数组;
} O(N)使用辅助数组的求解思路:
遍历整个数组,统计奇数个数,申请辅助数组作为返回结果。如果是基数,就从下标0位置放回。如果是偶数,就从奇数总数的下标开始放回。代码如下:
向量整型数组(向量整型数组)
{
int n=array . size();
vector int RES(n);
int奇数=0;
//计数奇数
for(int I=0;I n;我)
{
if (array[i] % 2)
奇数;
}
//x和Y分别代表答案中奇数和偶数的坐标
int x=0,y=奇数;
for(int I=0;I n;我)
{
if (array[i] % 2)
{
RES[x]=array[I];//奇数
}
其他
{
RES[y]=array[I];//偶数
}
}
返回res
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。