链表重置(线性表)
时间: 1ms 内存:128M
描述:
(线性表)已知线性表(a1 a2 a3 …an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负数的元素移到全部正数值元素前边的算法:
输入:
输入长度n:6
输入数据:-x -x x x -x x
输出:
-x -x -x x x x
示例输入:
7
1 -5 -4 2 8 -9 10
示例输出:
-5 -4 -9 1 2 8 10
提示:
参考答案(内存最优[748]):
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
int m,i,j,x,temp,k=0;
scanf("%d",&m);
p=(int *)malloc(m*sizeof(int));
for(i=0;i<m;i++)
{
scanf("%d",&x);
p[i]=x;
}
for(i=0;i<m;i++)
if(p[i]<0&&i!=0)
{
temp=p[i];
k++;
for(j=i;j>k-1;j--)
p[j]=p[j-1];
p[k-1]=temp;
}
for(i=0;i<m;i++)
printf("%d ",p[i]);
return 0;
}
参考答案(时间最优[0]):
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int num;
cin>>num;
int sum1[1000],sum2[1000],tmp,p=0,n=0;
for(int x=0;x<num;x++)
{
cin>>tmp;
if(tmp>0)sum1[p++]=tmp;
else sum2[n++]=tmp;
}
for(int m=0;m<n;m++)cout<<sum2[m]<<" ";
for(int a=0;a<p;a++)cout<<sum1[a]<<" ";
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。