早教吧作业答案频道 -->其他-->
求一个算法设数组A[1..2n]中存放有n个负数和n个正数,且随机存放.现要求按负数正数相间存放.请写出实现此要求的算法.算法要求:不能使用额外的存储空间,但可使用少量工作单元,算法的时间
题目详情
求一个算法
设数组A[1..2n]中存放有n个负数和n 个正数,且随机存放.现要求按负数正数相间存放.请写出实现此要求的算法.算法要求:不能使用额外的存储空间,但可使用少量工作单元,算法的时间复杂度应为O(n).
设数组A[1..2n]中存放有n个负数和n 个正数,且随机存放.现要求按负数正数相间存放.请写出实现此要求的算法.算法要求:不能使用额外的存储空间,但可使用少量工作单元,算法的时间复杂度应为O(n).
▼优质解答
答案和解析
相间存放,说明如果所有负数在奇数位置上,则所有正数在偶数位置上,反之亦然.假设把所有负数都放奇数位置上,所有正数都放偶数位置上,则A[0],A[2],...,A[2n-2]位置应该都存放负数,A[1],A[3],...,A[2n-1]位置上应该存放正数.可以设计两个索引forward和back,初始分别执行第一个位置和最后一个位置,forward每次都递增2,back每次都递减2,直到forward所指位置的元素为正数,back所指元素为负数,然后交换forward和back所指元素.一直到遍历完数组中的所有元素.
参考程序:
void arrange(int a[],int n)
{
int forwad,back;
forward = 0;
back = 2*n-1;
while(forward < 2*n - 1 && back > 0)
{
while(forward < 2*n - 1 && a[forward] < 0)
forward += 2;
while(back > 0 && a[back] > 0)
back -= 2;
if(back > 0)
{
int temp;
temp = a[forward];
a[forward] = a[back];
a[back] = temp;
}
}
}
参考程序:
void arrange(int a[],int n)
{
int forwad,back;
forward = 0;
back = 2*n-1;
while(forward < 2*n - 1 && back > 0)
{
while(forward < 2*n - 1 && a[forward] < 0)
forward += 2;
while(back > 0 && a[back] > 0)
back -= 2;
if(back > 0)
{
int temp;
temp = a[forward];
a[forward] = a[back];
a[back] = temp;
}
}
}
看了 求一个算法设数组A[1..2...的网友还看了以下:
请问手机内置电子指南针所指方向是磁北极还是地理南极?磁北极与地理南极相差11度,而地磁北极是随时间 2020-05-23 …
对于一定量的理想气体,下列说法正确的是.A.若气体的压强和体积都不变,其内能也一定不变B.若气体的 2020-07-12 …
关于直线运动,下述说法中正确的是()A.匀速直线运动的速度是恒定的,不随时间而改变B.速度随时间不 2020-07-13 …
关于直线运动,下列说法正确的是()A.匀速直线运动的速度恒定,不随时间而变化B.匀变速直线运动的加 2020-07-13 …
(1)对于一定量的理想气体,下列说法正确的是A.若气体的压强和体积都不变,其内能也一定不变B.若气 2020-07-13 …
二、判断题(共5道试题,共20分.)1.A.错误B.正确2.正弦量的大小和方向都随时间不断变化,因 2020-08-01 …
对于一定量的理想气体,下列说法正确的是()A.若气体的压强和体积都不变,其内能也一定不变B.当气体温 2020-11-01 …
对于一定量的理想气体,下列说法正确的是()A.若气体的压强和体积都不变,其内能也一定不变B.若气体的 2020-12-01 …
这是什么定律还是什么效应A会随时间不断增长B会随时间不断的减少有规律的减少类似科技在不断的创新越发展 2020-12-17 …
二、判断题(共5道试题,共20分.)1.A.错误B.正确2.正弦量的大小和方向都随时间不断变化,因此 2021-01-14 …