绝对值排序 hdoj2020

#include
#include
using namespace std;


int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        int s[105];
        for (int i=0; i             scanf("%d",&s[i]);


        for (int i=0;i             for(int j=i+1;j                 if(abs(s[i])                     swap(s[i],s[j]);


        printf("%d",s[0]);
        for(int i=1;i             printf(" %d",s[i]);
        puts("");
    }
    return 0;

}


这串代码有以下几点值得学习之处:

1.代码分块,不同功能的代码分在不同的区域(输入代码,实现代码,输出代码),用两空行分隔,一目了然。


2.对于格式要求严格的oj,输出结果时往往要求两个数之间用一个空格隔开。每个测试实例占一行。 但是使用以下代码显然是巧妙的解决了这个问题:


printf("%d",s[0]);
        for(int i=1;i
            printf(" %d",s[i]);
        puts("");



3.学习到了swap()函数和abs()函数。



4.在这里还要谈谈冒泡:


for (int i=0;i


            for(int j=i+1;j

//为什么是比n-(i+1)次呢?检索次数计算是:总个数-数所在位置数,因为数组是从0开始的所以  数所在位置数为i+1


                if(abs(s[i])
                    swap(s[i],s[j]);











你可能感兴趣的:(acm)