绝对值排序

在前面曾经简单的讲了一下排序,也讲到过这道题,是在冒泡的时候,今天会用快排的方式给一下代码:

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

时间: 2024-08-27 07:38:26

绝对值排序的相关文章

hdu 2020 绝对值排序 (java)

问题: 注意输入方式,可以直接用数组来装. 绝对值排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 51480    Accepted Submission(s): 24867 Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等.

hdu 2020 绝对值排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2020 题目大意:按照绝对值大小从大到小排序,注意输出两个数之间要用空格隔开,在这里引入一个冒泡排序,两个循环即可! 1 #include <stdio.h> 2 #include <math.h> 3 int main () 4 { 5 int n,a[100],i,j,t; 6 while (scanf("%d",&n),n) 7 { 8 for (i=0

【 OJ 】绝对值排序

绝对值排序 发布时间: 2017年11月12日 12:31   最后更新: 2017年11月12日 12:33   时间限制: 1000ms   内存限制: 128M 描述 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. 输入 输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理. 输出 对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开.每个测试实例占一行. 样例输入1

YT14-先来练练手之绝对值排序

Problem 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

HDU2020——绝对值排序(java实现,使用map)

Question Description Input Output Sample Input Sample Output 解题思路简述: 在接收每一个数组的过程中,将负数及其绝对值以键值对的形式存入map(先绝对值,后负数)(因为题目有说“题目保证对于每一个测试实例,所有的数的绝对值都不相等.”) 然后数组中实际存储的是绝对值而不是负数 然后将数组通过冒泡排序降序排序 最后遍历数组,同时查询map中是否有相应键值对,有的话就将该项变为负数 然后打印_完成 源码: import java.util

绝对值排序(2020)——笔记待完善

思考:这道题用的是插入排序的算法思想. #include<stdio.h> #include<cmath> int main() { int n; char d; int r[101]; while (scanf_s("%d%c", &n, &d) != EOF) { if (n == 0) break; for (int i = 1; i <= n; i++) { int a; scanf_s("%d", &a

hdu 2018(母牛问题)2019(数列有序!)2020(绝对值排序 )2021(发工资)2022(海选女主角)

要发现它的规律,题n年牛的总数等于n-1年的母牛数加上第n年新增的母牛数,第n年只有n-3年的那些母牛才能产母牛,所以第n年的母牛数等于第n-1和n-3年的母牛数的和,即sum(n)=sum(n-1)+sum(n-3),可用递归来做 1 #include<cstdio> 2 #include<cmath> 3 #include<string.h> 4 #include<iostream> 5 #include<algorithm> 6 using

2020.绝对值排序

#include<stdio.h> int main(){          int n,a[100];          scanf("%d",&n);          for(int i=0;i<n;i++)          scanf("%d",a[i]);          for(int i=0;i<n;i++)          {          if(a[i]<0)a[i]=-a[i];         

HDOJ 2020 绝对值排序

#include<iostream> #include<cmath> #include<algorithm> #include<vector> using namespace std; bool cmp(int a, int b) { return abs(a) > abs(b); } int main() { int n; while (cin >> n && n != 0) { vector<int> v;