一、问题描述
二、尝试分析
题目是将一串数字中的负数提前,而且注意提前的数字在原先的顺序里顺序不变,就是将后边的负数放在已经排好序的负数后边,然后整数从头遍历顺序不变放在负数后边。
三、代码部分
小白的解决问题的代码很繁琐,但是容易理解,要是有别的更简单的方法最好
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int a[1000];
typedef struct Node
{
int data;
struct Node *next;
}SqList;
SqList *L;
SqList *s,*r;
void Creat(SqList * & L,int a[],int n)
{
SqList *s,*r;
L = (SqList *)malloc(sizeof(SqList));
L->next=NULL;
r=L;
for(int i=0;i<n;i++)
{
if(a[i]<0)
{
s=(SqList *)malloc(sizeof(SqList));
s->data=a[i];
//s1->next=L1->next;
//L1->next=s1;
//r1=s1;
r->next=s;
r=s;
}
}
for(int i=0;i<n;i++)
{
if(a[i]>0)
{
s=(SqList *)malloc(sizeof(SqList));
s->data=a[i];
//s1->next=L1->next;
//L1->next=s1;
//r1=s1;
r->next=s;
r=s;
}
}
r->next=NULL;
}
void Print(SqList *L1)
{
SqList *q=L1->next;
while(q!=NULL)
{
printf("%d ",q->data);// cout<<p->data<<endl;
q=q->next;
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Creat(L,a,n);
Print(L);
return 0;
}