内存:2  时间:1

题目描述

若一个线性表L采用顺序存储结构存储,其中所有元素都为整数。设计一个算法,将所有小于0的元素移到所有大于0的元素前面,要求算法的时间复杂度不超过O(nlog(n)),空间复杂度为O(1)。

  

顺序表的定义为:

typedef struct
{
    ElemType data[SizeMax];
    int length;
} SqList;
  
需编写的算法为:
void move(SqList *&L);
  

注意:只需提交你所编写的算法即可

输入

输入的数据有两行,第一行输入线性表的长度n,第二行依次输入n个元素。

输出

输出的数据占一行,为调整之后的线性表,每个元素中间用空格分隔。

样例输入

10
-12 25 -19 21 -18 -11 5 -18 9 -22

样例输出

-12 -19 -18 -11 -18 -22 25 21 5 9

提示

1、请选择C++提交

2、注意调整后元素的顺序

3、只需提交调整顺序表元素的算法(move函数)

代码如下

#include <iostream>

using namespace std;



struct SqList{
    int data[30];
    int length;
};


void move(SqList *&L){
    int temp;
    for(int i=0;i<L->length;i++){
        if(L->data[i]<0){
            for(int j=0;j<i;j++){
                if(L->data[j]>0){
                    temp=L->data[i];
                    L->data[i]=L->data[j];
                    L->data[j]=temp;
                    break;
                }
            }
        }
    }
}

int main()
{
    int num;
    struct SqList *sl=new SqList;
    cin>>num;
    sl->length=num;
    for(int i=0;i<num;i++){
        cin>>sl->data[i];
    }
    move(sl);
    for(int i=0;i<sl->length;i++){
        cout<<sl->data[i]<<" ";
    }
    cout<<endl;
    return 0;
}

代码来源于互联网,仅供参考!