排序【数组】

排序【数组】

时间: 1ms        内存:128M

描述:

已知数组A[1..n]的元素类型为整型,设计算法调整A,使其左边的所有元素小于零,右边的所有元素大于等于零。(要求算法的时间复杂度和空间复杂度均为0(n))

输入:

数组大小

数组中个元素

输出:

排列后的数组元素

示例输入:

5
5 6 -1 5 1
5
3 3 -1 -1 2

示例输出:

-1 5 6 5 1
-1 -1 3 3 2

提示:

参考答案(内存最优[1120]):


#include<stdio.h>
void work(int *a, int n)
{    int i, j, t;    for(i = 0, j = n - 1; i < j;)   
 {        if(a[i] < 0){ i++; continue;}        if(a[j] >= 0){ j--; continue;} 
       t = a[i];        a[i] = a[j];        a[j] = t;    }}
int main()
{    int a[1000], n, i;    while(scanf("%d", &n) != EOF)    
{        for(i = 0; i < n; i++) scanf("%d", &a[i]);        work(a, n);   
     for(i = 0; i < n; i++) printf("%d ", a[i]);        printf("\n");    }   
 return 0;}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
void sort(int a[],int n)
{
    int i,b[100],k=0;
    for (i=0;i<n;i++)
    {
        if (a[i]<0)
            b[k++]=a[i];
    }
    for (i=0;i<n;i++)
    {
        if (a[i]>=0)
            b[k++]=a[i];
    }
    for (i=0;i<n;i++)
    {
        a[i]=b[i];
    }
}


int main()
{
    int n,a[100],i=0;
    while (cin>>n)
    {
        for (i=0;i<n;i++)
            cin>>a[i];
    sort(a,n);
    for (i=0;i<n-1;i++)
        cout<<a[i]<<" ";
    cout<<a[i]<<endl;
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注