将输出从高到低排序

时间:2015-05-10 02:10:35

标签: c sorting struct

我做了一个简单的程序,只显示输入作为输出。 我的主要问题是我想要将输出从高到低排序。 输出与输入的顺序相同,而不是从高到低排序。 有人可以查看我的代码并查看它没有排序的原因。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define size 7
#include<stdlib.h>
struct books
{
    int profit;
};
void load(struct books b[], int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("Enter profit:\n");
        scanf("%d", &b[i].profit );
    }
}
void print(struct books b[], int n)
{
    int i;
    for (i = 0; i<n; i++)
    {
        printf("Profit is:%d\n",b[i].profit);
    }
}
void sort(struct books b[], int n)
{
    int i; int j;
    books t;
    for (i = 0; i < n-1; i++)
        for (j = 0; j < n-1 ; j++)
            if (b[j].profit < b[j + 1].profit)
            {
                t = b[j];
                b[j] = b[j + 1];
                b[j+1] = t;
            }
}
void main()
{
    books b[size];
    load(b, size);
    print(b, size);
    sort(b, size);
    system("pause");
}

3 个答案:

答案 0 :(得分:1)

如果要打印已排序的列表,则需要在调用print之前调用sort:

void main()
{
    books b[size];
    load(b, size);

    sort(b, size);
    print(b, size);

    system("pause");
}

另外,我认为您需要将books结构定义为

    struct books b[size];

如果你想避免编译错误。

最后,要将列表从低到高而不是从高到低打印,您可以按照另一个答案中的建议修改排序算法,也可以按如下方式修改打印算法:

void print(struct books b[], int n)
{
    int i;
    for (i = n-1; i>0; i--)
    {
        printf("Profit is:%d\n",b[i].profit);
    }
}

答案 1 :(得分:1)

使用类似的东西(倒置气泡排序):

inverted_sort()

请记住更改功能顺序,print()必须先于void main() { books b[size]; load(b, size); inverted_sort(b, size); print(b, size); }

{{1}}

希望这有帮助!

答案 2 :(得分:0)

使用它:

void sort(struct books b[], int n)
{
    int i; int j;
    books t;
    for (i = 0; i < n; i++)
        for (j = i + 1; j < n ; j++)
            if (b[j].profit > b[i].profit)
            {
                t = b[j];
                b[j] = b[i];
                b[i] = t;
            }
}