C 图书馆函数进行排序

标准库中是否有任何库功能 C 进行排序?
已邀请:

龙天

赞同来自:

qsort//

- 这是您正在寻找的功能。 您将其调用到数据阵列的指针,此阵列中的项目数,每个元素的大小和比较函数。

他制作了他的魔力,你的阵列被排序到位。 以下是一个例子:


#include <stdio.h>
#include <stdlib.h>
int comp /const void * elem1, const void * elem2/
{
int f = *//int*/elem1/;
int s = *//int*/elem2/;
if /f &gt; s/ return 1;
if /f &lt; s/ return -1;
return 0;
}
int main/int argc, char* argv[]/
{
int x[] = {4,5,2,3,1,0,9,8,6,7};

qsort /x, sizeof/x//sizeof/*x/, sizeof/*x/, comp/;

for /int i = 0 ; i &lt; 10 ; i++/
printf /"%d ", x[i]/;

return 0;
}


</stdlib.h></stdio.h>

喜特乐

赞同来自:

C/C++ 标准库
<stdlib.h>

包含功能
qsort

.

这不是世界上快速排序的最佳实现,但它足够快,非常
易于使用...正式语法 qsort 这样的:


qsort/<arrayname>,<size>,sizeof/<elementsize>/,compare_function/;


你唯一需要实施的东西 - 这是 compare_function, 这需要两者
键入参数 "const void", 可以给出相应的数据结构,然后
返回这三个值之一:

负,如果 a 必须是之前 b

0, 如果一个 a 一样 b

积极,如果 a 必须是之后 b

1. 对整数列表的比较

:

只是带来 a 和 b 整数
数字 , 如果一个
x &lt; y

,
x-y

消极的
x == y

,
x-y = 0

,
x &gt; y

,
x-y

积极的
x-y

- 这是一项简短的方法 :/
背部
*x - *y


*y - *x

用于按降序排序/相反的顺序


int compare_function/const void *a,const void *b/ {
int *x = /int */ a;
int *y = /int */ b;
return *x - *y;
}


2. 字符串列表的比较

:

要比较您需要函数的线条
strcmp

里面
<string.h>

lib.
strcmp

默认情况下,返回-ve,0,ve,分别以相反的顺序排序,只需转动返回的标志 strcmp


#include <string.h>
int compare_function/const void *a,const void *b/ {
return /strcmp//char */a,/char */b//;
}


3. 浮点数比较

:


int compare_function/const void *a,const void *b/ {
double *x = /double */ a;
double *y = /double */ b;
// return *x - *y; // this is WRONG...
if /*x &lt; *y/ return -1;
else if /*x &gt; *y/ return 1; return 0;
}


4. 基于关键的条目的比较

:

有时您需要对更复杂的材料进行种类,例如录制。 这是最简单的
使用库的方式
qsort

.


typedef struct {
int key;
double value;
} the_record;

int compare_function/const void *a,const void *b/ {
the_record *x = /the_record */ a;
the_record *y = /the_record */ b;
return x-&gt;key - y-&gt;key;
}


</string.h></string.h></elementsize></size></arrayname></stdlib.h>

奔跑吧少年

赞同来自:

当然:
qsort//

- 这是视图的实现 /没必要 quicksort, 怎么可能从他的名字中承担/.

尝试 man 3 qsort 或阅读地址
http://linux.die.net/man/3/qsort

三叔

赞同来自:

虽然这不是一个完全标准的库,但
https://github.com/swenson/sort
它只有两个标题文件可以启用以访问广泛的令人难以置信的快速排序路由,例如:

#define SORT_NAME int64
#define SORT_TYPE int64_t
#define SORT_CMP/x, y/ //x/ - /y//
#include "sort.h"
/* You now have access to int64_quick_sort, int64_tim_sort, etc., e.g., */
int64_quick_sort/arr, 128/; /* Assumes you have some int *arr or int arr[128]; */
它应该至少是快的两倍 , 比标准图书馆
qsort

, 由于它不使用函数指针并具有许多分类算法的其他变体来选择。

他在 C89, 因此,它应该在几乎所有的编译器中工作 C.

石油百科

赞同来自:

尝试
qsort

在 stdlib.h.

喜特乐

赞同来自:

使用
qsort//


<stdlib.h>

.

@paxdiablo
功能
qsort//

相当于 ISO/IEC 9899:1990 /``ISO C90''/.
</stdlib.h>

龙天

赞同来自:

有几个排序功能。 C, 可用
stdlib.h

. 你可以做
man 3 qsort

坐车 unix, 要获取他们的清单,但它们包括:

金字塔分类

快速排序

排序合并

要回复问题请先登录注册