插入排列与绝对值排列

杭电2019:
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
有一个很简便的算法。用sort函数。我的博客里也有对sort函数的简单解释。
sort函数
直接代码。

#include<stdio.h>
#include<iostream>
using namespace std;
#include<algorithm>
int main()
{
    int a[1000],n,b;
    while(scanf("%d%d",&n,&b)!=EOF)
    {
        if(n == 0 && b == 0)
            break;
        int i;
        for(i = 0; i < n ;i ++)
            scanf("%d",&a[i]);
        a[n] = b;
        sort(a,a+n+1);
        printf("%d",a[0]);
        for(i = 1;i < n+1;i ++)
            printf(" %d",a[i]);
        printf("\n");
    }
    return 0;
}

杭电2020:
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
是排列的升级版。原以为可以用sort函数,但是不行。
看代码。

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

你可能感兴趣的:(算法,函数,博客)