码迷,mamicode.com
首页 > 编程语言 > 详细

绝对值排序

时间:2015-02-17 17:41:53      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

在前面曾经简单的讲了一下排序,也讲到过这道题,是在冒泡的时候,今天会用快排的方式给一下代码:
Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

Sample Input

3 3 -4 2 4 0 1 2 -3 0

Sample Output

-4 3 2 -3 2 1 0

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void *x, const void *y)
{
    if(*(int *)x<*(int *)y)
    {
        return 1;
    }
    else
    {
        return -1;
    }
}
int main()
{
    int n, i, j, a[105], b[105], flag[105];
    while(~scanf("%d", &n))
    {
        if(n==0)
        {
            break;
        }
        for(i=0; i<n; i++)
        {
            scanf("%d", &a[i]);
        }
        memset(b, 0, sizeof(b));
        memset(flag, 0, sizeof(flag));
        for(i=0; i<n; i++)
        {
            if(a[i]<0)
            {
                b[i]=-a[i];
            }
            else
            {
                b[i]=a[i];
            }
        }
        qsort(b, n, sizeof(b[0]), cmp);
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            {
                if(a[i]==-b[j])
                {
                    flag[j]=4;//注意
                }
            }
        }
        for(i=0; i<n; i++)
        {
            if(flag[i]==4)
            {
                printf("%d", -b[i]);
            }
            else
            {
                printf("%d", b[i]);
            }
            if(i!=n-1)
            {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

分析一下代码:
1.flag[]是用来标记的,还没想到更好的办法,所以。。
2.最好是把b[], flag[]都初始化为0(也可以为其他);
3.数组开的大一点;
4.再是输出的时候,注意一下题目要求,是结果后面都要有一个空行;

也可以看一下我原来的用冒泡的代码和关于快排的东西:
http://blog.csdn.net/unusualnow/article/details/43817885
http://blog.csdn.net/unusualnow/article/details/43818025

绝对值排序

标签:

原文地址:http://blog.csdn.net/unusualnow/article/details/43866753

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!