我有两个整数数组,我试图根据另一个数组对第一个数组进行排序。
例如。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/