早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求一个算法设数组A[1..2n]中存放有n个负数和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;
}
}
}
看了 求一个算法设数组A[1..2...的网友还看了以下:

现有两瓶硫酸,一瓶是15摄氏度时PH=1的硫酸,另一瓶是35摄氏度时PH=1的硫酸,下列关于这两瓶硫  2020-03-30 …

下列说法中,不违背科学规律的是①改变核外电子数可使原子与离子相互转化以下说法中,不违背科学规律的是  2020-05-16 …

在等腰三角形ABC中,AB=AC,那么下列说法中不正确的是()A.BC边上的高线和在等腰三角形AB  2020-05-21 …

在下面几种说法中,不正确的说法是A.波源不动时,波源的振动周期与波动的周期在数值上是不同的B.波源  2020-07-03 …

成语猜猜猜《兰亭集序》是大书法家王羲之为诗集《兰亭序》写的序,共28行,324个字.整个序中凡是相  2020-07-24 …

对下列句中的“以”,说法正确的一项是①余以乾隆三十九年十二月②余始循以入③回视日观以西峰[]A.①  2020-07-26 …

对下列句中的“以”,说法正确的一项是①余以乾隆三十九年十二月②余始循以入③回视日观以西峰A.①②③  2020-07-26 …

对下列句子中的“以”,说法正确的一项是[]①余以乾隆三十九年十二月②余始循以入③回视日观以西峰A.  2020-07-28 …

在男子百米短跑比赛中,运动员们快步如飞,关于运动快慢的说法中不正确的是()A.观众用“相同的时间比路  2020-10-30 …

下列选项中加点字的意义和用法都不相同的一项是A.计不独生而令赵亡独不怜公子姊邪B.是以就极刑下列选项  2020-11-24 …