C编程语言中是否有用于排序数组的内置函数?还是我需要编写自己的函数?
查看qsort
语法:
#include <stdlib.h>
void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );
描述:
qsort()
函数使用快速排序算法对buf(包含num个大小为size的项)进行排序。比较函数用于比较buf中的项。如果第一个参数小于第二个参数,则比较应返回负数;如果它们相等,则应返回零;如果第一个参数大于第二个参数,则应返回正数。qsort()按升序对buf进行排序。
qsort 是众所周知的。还有像heapsort、mergesort等排序算法。请查看链接以获取更多细节。
请注意,它们都将比较函数作为输入,使它们易于与本地和用户创建的数据类型一起使用。
mergesort
和heapsort
...结果发现它们在FreeBSD的libc中。太棒了。+1(注意:它们似乎不存在于glibc中。) - Conrad Meyer #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;
}
简单语法:
int function (const void * a, const void * b) {return ( *(int*)a-(int*)b);}
`qsort(arr_name , sizeofarray , sizeof(int), function);
stdlib.h
中的qsort
函数 - nhahtdhbsearch(3)
是与qsort(3)
类似的libc例程,许多人并不知道它的存在。(通常情况下,它们一起使用:在二分查找之前需要对数组进行排序。=)) - Conrad Meyer