gpt4 book ai didi

c - 在 C 中对二维 double 组进行排序

转载 作者:行者123 更新时间:2023-11-30 19:11:46 27 4
gpt4 key购买 nike

我正在尝试使用 qsort 对 C 中的二维数组进行排序。

我有这个数组:

{ {1.0, 0.0}, {123.0, 1.0}, {2.0, 2.0} }

我希望它按第二个值排序:

{ {1.0, 0.0}, {2.0, 2.0}, {123.0, 1.0} }

我尝试为 qsort 编写一个数组比较器,但总是得到错误的元素顺序。

这是我写的比较器:

int CompareArrays(const void* arr1, const void* arr2) {

const double* one = (const double*) arr1;
const double* two = (const double*) arr2;
printf ("one[0] = %lf , one[1] = %lf \n", one[0], one[1]);
printf ("two[0] = %lf , two[1] = %lf \n", two[0], two[1]);
if (one[0] < two[0]) return -1;
if (one[0] > two[0]) return 1;

return 0;
}

我还尝试打印这些值,以便了解每次比较的项目,但每次都会打印 0.0000...。

有人知道我做错了什么吗?

最佳答案

人们试图帮助您的问题是您的文本说的是一件事(按第二个元素排序),但您的示例显示了另一件事(按第一个元素排序)。我们首先假设“按第一个元素排序”并解决问题:

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

int compareArrays(const void *array1, const void *array2) {
const double *one = (const double *) array1;
const double *two = (const double *) array2;

return (one[0] > two[0]) - (one[0] < two[0]); // compare idiom
}

#define SUBELEMENTS (2)

void printArray(double array[][SUBELEMENTS], size_t rows) {
printf("{");

for (size_t i = 0; i < rows; i++) {
printf("{");

for (size_t j = 0; j < SUBELEMENTS; j++) {
printf("%.1f", array[i][j]);

if (SUBELEMENTS > 1 && j < SUBELEMENTS - 1) {
printf(", ");
}
}

printf("}");

if (rows > 1 && i < rows - 1) {
printf(", ");
}
}

printf("}\n");
}

int main() {
double array[][SUBELEMENTS] = {{1.0, 0.0}, {123.0, 1.0}, {2.0, 2.0}};

size_t elements = sizeof(array) / sizeof(array[0]);

printf("Unsorted: ");
printArray(array, elements);

qsort(array, elements, sizeof array[0], &compareArrays);

printf("Sorted: ");
printArray(array, elements);

return 0;
}

如果您确实想要“按第二个元素排序”,请将 compareArrays() 的最后一行更改为:

return (one[1] > two[1]) - (one[1] < two[1]);

输出

> ./a.out
Unsorted: {{1.0, 0.0}, {123.0, 1.0}, {2.0, 2.0}}
Sorted: {{1.0, 0.0}, {2.0, 2.0}, {123.0, 1.0}}
>

关于c - 在 C 中对二维 double 组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193394/

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