gpt4 book ai didi

c - C中最简单的int数组排序函数

转载 作者:行者123 更新时间:2023-12-05 01:18:30 26 4
gpt4 key购买 nike

我正在寻找 C 中最容易使用的数组排序函数。我打算教一些 C 语言(实际上这些是每种语言的通用基础知识)。是否有像 Java 那样的 int 数组函数

Arrays.sort(arr);

我见过 qsort,但正如我所见,它需要额外的比较功能。

最佳答案

那么...实现该功能并完成...

int compare_int( const void* a, const void* b )
{
if( *(int*)a == *(int*)b ) return 0;
return *(int*)a < *(int*)b ? -1 : 1;
}

const size_t num_elem = 10;
int elements[num_elem] = { 3, 6, 1, 9, 8, 2, 0, 5, 7, 4 };
qsort( elements, num_elem, sizeof(int), compare_int );

现在关于排序的类(class)变成了“这是如何工作的”?

您首先解释内存布局和数组。无论如何,除非您了解这一点,否则您无法在 C 中做很多事情。

然后解释什么是 void 指针以及为什么 qsort 函数需要知道:

  1. 数组的起始地址
  2. 元素个数
  3. 每个元素的大小
  4. 如何比较元素

这很自然地引出了比较函数本身......如何转换和取消引用类型。

最后,如果他们很好地掌握了这些概念,您可以指出 qsort 的第四个参数不是特例。你可以说拥有一个指向函数的指针并将其作为参数传递给另一个函数是完全可以的。这一切都是为了让指针的类型正确,然后编译器会为您整理出其余部分。

int (*comparator)(const void*, const void*) = compare_int;
int a = 1, b = 2;
printf( "comparator(%d, %d) = %d\n", a, b, comparator(&a, &b) );

关于c - C中最简单的int数组排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445845/

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