C中用于排序数组的内置函数
在C编程语言中是否有用于排序数组的内置函数?或者我必须编写自己的函数吗?请查看qsort 语法:C中用于排序数组的内置函数,c,arrays,function,sorting,built-in,C,Arrays,Function,Sorting,Built In,在C编程语言中是否有用于排序数组的内置函数?或者我必须编写自己的函数吗?请查看qsort 语法: #包括 void qsort(void*buf,size\u t num,size\u t size,int(*比较)(常量void*,常量void*)) 说明: qsort()函数使用快速排序对buf(包含num项,每个项的大小)进行排序。比较功能用于比较buf中的项目。如果第一个参数小于第二个参数,compare应返回负数;如果它们相等,则返回零;如果第一个参数大于第二个参数,则返回正数。qso
#包括
void qsort(void*buf,size\u t num,size\u t size,int(*比较)(常量void*,常量void*))代码>
说明:
qsort()
函数使用快速排序对buf(包含num项,每个项的大小)进行排序。比较功能用于比较buf中的项目。如果第一个参数小于第二个参数,compare应返回负数;如果它们相等,则返回零;如果第一个参数大于第二个参数,则返回正数。qsort()按升序对buf进行排序 是:。它位于stdlib.h
中,您可以在stdlib.h
中使用。它是一种快速排序算法,平均时间复杂度为O(nlogn),最坏情况复杂度为O(n2)。甚至更新的版本也不要求函数的实现或时间复杂性。然而,通常的实现很可能会使用产生平均案例O(nlogn)时间复杂度的算法(这对于通过比较进行排序是最佳的)
您可以使用它对任何类型的数组进行排序(甚至是struct
)-但是您必须提供一个比较函数来比较数组的两个元素。是众所周知的。还有其他像heapsort、mergesort等。请查看链接了解更多详细信息
请注意,它们都将比较函数作为输入,使它们易于与本机数据类型以及用户创建的数据类型一起使用。简单语法:
int function (const void * a, const void * b) {return ( *(int*)a-(int*)b);}
`qsort(arr_name , sizeofarray , sizeof(int), function);
#包括
#包括
//此函数在qsort中用于确定相对顺序
//地址p和q处的元素数量。
int比较器(常量无效*p,常量无效*q)
{
返回(*(int*)p-*(int*)q);
}
//打印数组的实用函数
无效打印阵列(内部阵列[],内部网络)
{
int i;
对于(i=0;i
qsort
在stdlib.h
@nhahtdh不把它作为答案发布?@triclosan:写一行注释比写一个完整的答案要省力。不相关,但bsearch(3)
是另一个与qsort(3)
相同的libc例程,许多人不知道。(通常,它们一起使用:在对数组进行二进制搜索之前,需要对数组进行排序。=))注意:qsort()不一定是快速排序。(通常是这样)你可以链接到现在:)我很好奇有什么标准库存在mergesort
和heapsort
。。。原来他们在FreeBSD的libc里。酷+1(注意:glibc中似乎不存在它们。)它们是非标准C函数。注意:qsort()不一定是快速排序。(尽管经常如此)
#include <stdio.h>
#include <stdlib.h>
// This function is used in qsort to decide the relative order
// of elements at addresses p and q.
int comparator(const void *p, const void *q)
{
return (*(int*)p-*(int*)q);
}
// A utility function to print an array
void printArr(int arr[], int n)
{
int i;
for (i = 0; i < n; ++i)
printf("%d ", arr[i]);
}
// Driver program to test above function
int main()
{
int arr[] = {1, 6, 5, 2, 3, 9, 4, 7, 8, 0};
int size = sizeof(arr) / sizeof(arr[0]);
qsort((void*)arr, size, sizeof(arr[0]), comparator);
printf("Output array is\n");
printArr(arr, size);
return 0;
}