gpt4 book ai didi

c++ - 如何根据 c/c 中的特定索引对二维数组进行排序?

转载 作者:太空狗 更新时间:2023-10-29 21:24:12 24 4
gpt4 key购买 nike

假设我们有一个二维数组 A :

    A[3][3] = { {1 ,4 ,7},
{6 ,2 ,3},
{3 ,5 ,5}
}

我想根据索引 i(比如 1)对其进行排序结果应该是

    A[3][3] = { {6 ,2 ,3},
{1 ,4 ,7},
{3 ,5 ,5}
}

对 0 排序会导致

    A[3][3] = { {1 ,4 ,7},
{3 ,5 ,5},
{6 ,2 ,3}
}

如何使用排序函数来做到这一点?

最佳答案

在 C 中:

stdlib.h 中的

qsort 对任意长度和任意元素大小的数组进行排序,为了实现您想要的结果,我们需要向它提供这两条信息,即长度是行数,元素大小是列数

除了这些它需要知道如何比较元素,qsort 需要一个带有签名 int (*)(void *, void *) 的函数指针。使用指向每个元素的指针调用此函数,这将是每行中第一个数字的地址,现在我们只需要将选择的元素相互比较即可。 qsortA < B 的情况下期望数字小于零,在 A == B 的情况下为零,在 的情况下大于零A > B,这是通过从 A 中减去 B 来完成的。由于我们得到了指针,我们可以将它们转换为 int* 并使用索引运算符将所需位置相互比较。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

const int sort_element = 1;// Choose a value from 0 to the column width

int intcmp( const void *a, const void *b ){
const int *A = a;
const int *B = b;
return A[sort_element]-B[sort_element];
}
int main(){
int a[3][3] = {
{1 ,4 ,7},
{6 ,2 ,3},
{3 ,5 ,5}
};
qsort( a, 3, sizeof(int)*3, intcmp);
}

如您所见,我们需要为每个要排序的元素使用一个比较函数。

关于c++ - 如何根据 c/c 中的特定索引对二维数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com