gpt4 book ai didi

c++ - 根据其他数组对数组进行排序

转载 作者:行者123 更新时间:2023-11-28 03:50:33 25 4
gpt4 key购买 nike

我有一个包含两个元素的数组。现在我想对所有以零结尾的值(例如 arr[3][0]arr[1][0])进行排序,从低到高排序.

然后我想对以 1 结尾的值(例如 arr[2][1]arr[1][1])进行排序, 但不是按照自己的顺序,而是与第一个数组的顺序相同。

这是我尝试过的:

int compareInts(const void* a, const void* b)
{
return ( *(int*) a[0] - *(int*) b[0] );
}

int arr[4][2];

arr[0][0] = 50;
arr[0][1] = 0;

arr[1][0] = 40;
arr[1][1] = 1;

arr[2][0] = 50;
arr[2][1] = 2;

arr[3][0] = 85;
arr[3][1] = 3;

qsort( arr, 4, sizeof(int), compareInts );


我希望得到以下结果:

arr[0][0] = 40;
arr[0][1] = 1;

arr[1][0] = 50;
arr[1][1] = 0;

arr[2][0] = 50;
arr[2][1] = 2;

arr[3][0] = 85;
arr[3][1] = 3;

最佳答案

只需实现您自己的搜索算法(使用冒泡排序或任何您认为可能最有效的算法)并进行类似于以下伪代码的比较/交换:

if(a[i][0] > a[j][0])
{
t[0] = a[i][0];
t[1] = a[i][1];
a[i][0] = a[j][0];
a[i][1] = a[j][1];
a[j][0] = t[0];
a[j][1] = t[1];
}

如果您想基于多个列进行排序,您只需重复此操作,比较其他子数组元素并首先对最不重要的列进行排序。

编辑:我认为这也应该可以使用 qsort()。您只需相应地设置元素大小(在您的示例中应为 2 * sizeof(int))。保持其余代码不变(尽管我对此不确定并且现在无法测试运行它)。

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

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