EOJ2031

排序

Time Limit:1000MS Memory Limit:30000KB
Total Submit:1434 Accepted:591

Description 

给你n(n<=100)个数,要求你把这n个数按照绝对值从小到大排序。
多Case,处理直到文件结束。

Input 

输入一个数n,接下来一行是n个整数(-10000,10000)。

Output 

排序后按照绝对值从小到大输出n个数,输出一行,每两个数字之间有个空格,最后一个数字后面没空格。

Sample Input 

4
-3 -4 1 2
1
10

Sample Output 

1 2 -3 -4
10



#include 
#include 


int compare(int x, int y){
    if(x < 0)x *= -1;
    if(y < 0)y *= -1;
    if(x < y)return 1;
    return 0;
}

void q_sort(int beg, int end, int *N){
    if(beg >= end)return;
    int i = beg, j = end, mid = N[(i + j) >> 1];
    int k = 0;

    while(i <= j){
        while(compare(N[i], mid))i++;
        while(compare(mid, N[j]))j--;
        if(i <= j){
            k = N[i];
            N[i++] = N[j];
            N[j--] = k;
        }
    }

    q_sort(beg, j, N);
    q_sort(i, end, N);
}



int main(){
    int N = 0, i = 0;
    int *set;
    while(scanf("%d", &N) != EOF){
        set = (int *)malloc(sizeof(int) * N);
        for(i = 0; i< N; i++)
            scanf("%d", &set[i]);
        q_sort(0, N - 1, set);

        printf("%d", set[0]);
        for(i = 1; i < N; i++)
            printf(" %d", set[i]);
        printf("\n");
        free(set);
    }
    return 0;
}


你可能感兴趣的:(EOJ解题报告)