【问题标题】:Best or most efficient way to sort parallel arrays using subroutines in C? [closed]使用 C 中的子例程对并行数组进行排序的最佳或最有效方法? [关闭]
【发布时间】:2015-04-15 22:21:35
【问题描述】:

好的,用户输入姓名和年龄。输出需要按升序打印。我已经完成了冒泡排序,但我不知道如何用名字来跟踪年龄。一种排序方法比另一种更好或更容易吗?

【问题讨论】:

    标签: c sorting subroutine


    【解决方案1】:

    您可以将所需的所有内容放入struct,而不是使用一堆数组,创建一个structs 的数组。例如:

    struct user {
        char name[100];
        int age;
    };
    
    struct user user_array[100];
    

    或者,如果您不想更改整个代码,只需在某处创建一个交换函数,然后在您的排序算法中,而不是直接交换元素,只需调用一个交换函数。例如,假设您有

    char name[100][100];
    int age[100];
    

    交换函数看起来像

    void swap_users(int a, int b, char ** name, int * age)
    {
        int age_tmp;
        char *name_tmp;
        age_tmp  = age [a]; age [a] = age [b]; age [b] = age_tmp;
        name_tmp = name[a]; name[a] = name[b]; name[b] = name_tmp;
    }
    

    您的排序算法将如下所示:

    void some_sorting_algorithm()
    {
        // do something ...
        // do something ...
        // maybe some loop? ...
            swap_users(x, y, name, age);
        // continue the loop or doing something
    }
    

    PS:希望我正确理解了你的问题。

    【讨论】:

    • 我喜欢那个交换功能,但我不确定我是否理解它。你能解释一下星号吗?指针?
    • 声明中的星号表示它是一个类型的指针。从技术上讲,数组是一个指针。例如,int *age -> age 是指向整数的指针,int age[100] -> age 也是指向整数的指针char ** name -> 所以 name 是指向 char 的指针(在声明中 char name[100][100] -> name 也是一个指向 char 的指针)。
    • 建议:使用 100 和 100 作为名称大小和 user_array 大小,使用 2 个不同的常量:让新手更容易遵循你的好例子/
    • 好的,谢谢大家,我选择选项二只是因为它已经写好了。我真的会读到支撑的想法。
    猜你喜欢
    • 2010-09-07
    • 2014-07-10
    • 2017-05-23
    • 2014-09-16
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多