早教吧作业答案频道 -->其他-->
求一个算法设数组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...的网友还看了以下:
数据结构时间复杂度问题一个算法所需时间由以下递归算法表示,试求出该算法的时间复杂度的级别当n=1时 2020-05-01 …
有什么简单的方法可以让水瞬间结冰!谁能瞬间结冰方法.要求简单.在生活中有的道具. 我试过用盐和吸管 2020-05-15 …
编写算法,求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+...+anxn的值Pn(x0 2020-07-09 …
急求物理!(不好意思大家图不懂怎么发希望解决的人复制一下去百度马上就有题目和图了)但我要问的是这题 2020-07-11 …
已知一条抛物线经过E(0,10),F(2,2),G(4,2),H(3,1)四点,选择其中两点用待定 2020-07-20 …
求一个算法设数组A[1..2n]中存放有n个负数和n个正数,且随机存放.现要求按负数正数相间存放. 2020-07-23 …
A、B分别为河两岸的两点,其距离不能直接测出.请你根据所学的知识,在河岸一边设计一个测量A/B两点 2020-08-03 …
试写一算法,对n个关键字取非零整数的记录序列进行整理,使得在尽可能少的时间内将所有取偶数的关键字放在 2020-11-18 …
用什么方法能求出最科学的平均数?1,1,2,3,2,1,20用什么方法可以求出最科学的平均数?不是把 2020-11-24 …
编程面试题,1.说明下面代码的作用a=a+b;b=a-b;a=a-b;此代码的作用?2.请描述一个算 2020-12-13 …