c - 在 C 中根据另一个数组对数组进行排序

标签 c arrays sorting

我有两个整数数组,我试图根据另一个数组对第一个数组进行排序。

例如。 a = {1,2,3,6,0,0,0};
b = {1,2,2,0,0,0,0};

b 中排序的值是 a 中每个整数的实际值

排序后我期望的预期结果是:

a = {2,3,1,6,0,0,0};
b = {2,2,1,0,0,0,0};

这是我使用的代码

int j,k,temp1,temp2;
for (j=0; j<N; j++){
    for (k=j+1; k<N; k++){
        if (b[j] < b[k]){
            temp1 = b[j];
            b[j] = b[k];
            b[k] = temp1;
            temp2 = a[j];
            a[j] = a[k];
            a[k] = temp2;
        }
    }
}

它给了我输出:a = {2,3,1,0,0,0,6};b = {2,2,1,0,0,0,0};

我不知道错误在哪里,感谢任何帮助和建议。

最佳答案

逐字记录代码的主要部分并将其转换为 MCVE ( Minimal, Complete, Verifiable Example ),我得到代码:

#include <stdio.h>

static void pr_data(const char *tag, int n, int *a)
{
    printf("%s = { ", tag);
    const char *pad = "";
    for (int i = 0; i < n; i++)
    {
        printf("%s %d", pad, a[i]);
        pad = ", ";
    }
    puts(" };");
}

int main(void)
{
    int a[] = { 1, 2, 3, 6, 0, 0, 0 };
    int b[] = { 1, 2, 2, 0, 0, 0, 0 };
    enum { N = sizeof(a) / sizeof(a[0]) };
    pr_data("a", N, a);
    pr_data("b", N, b);

    int j, k, temp1, temp2;
    for (j = 0; j < N; j++)
    {
        for (k = j + 1; k < N; k++)
        {
            if (b[j] < b[k])
            {
                temp1 = b[j];
                b[j] = b[k];
                b[k] = temp1;
                temp2 = a[j];
                a[j] = a[k];
                a[k] = temp2;
            }
        }
    }
    pr_data("a", N, a);
    pr_data("b", N, b);

    return 0;
}

注意最基本的调试技术——打印操作前后的内容。这可以确保您可以正确打印数据,拥有正确的数据,并使用已知有效的相同打印代码为您提供结果。

输出是:

a = {  1,  2,  3,  6,  0,  0,  0 };
b = {  1,  2,  2,  0,  0,  0,  0 };
a = {  2,  3,  1,  6,  0,  0,  0 };
b = {  2,  2,  1,  0,  0,  0,  0 };

输出看起来像你想要的。因此,问题似乎不在于您发布的代码,而在于您未发布的代码。目前尚不清楚这种麻烦会以何种形式出现。

关于c - 在 C 中根据另一个数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43571834/

相关文章:

c++ - C++ 中的归并排序

c - 找到所有 m 子序列的最大加权和

c - Linux 中的 pthread_mutex_trylock()

arrays - 当下标在范围内时,为什么我得到 "subscript out of range"?

c++ - 如何创建指针数组?

javascript - Laravel 分页表 - 对一列进行排序

c++ - 如何找到 n,其中 k = 2^n

c - 抢占、pthread_spin_lock 和原子内置

C 数组问题

Python排序从文件名和排序列表中获取日期时间