最容易在C中使用int数组排序功能

Yod*_*oda 2 c arrays sorting

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

Arrays.sort(arr);
Run Code Online (Sandbox Code Playgroud)

我见过qsort,但是我看到它需要额外的比较功能.

pad*_*ddy 7

所以...实现功能并完成它...

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 );
Run Code Online (Sandbox Code Playgroud)

现在关于排序的课程变成"这是如何工作的"?

首先解释内存布局和数组.在你知道这一点之前,你不能做很多事情.

然后你解释一下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) );
Run Code Online (Sandbox Code Playgroud)