Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中用于排序数组的内置函数_C_Arrays_Function_Sorting_Built In - Fatal编程技术网

C中用于排序数组的内置函数

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

在C编程语言中是否有用于排序数组的内置函数?或者我必须编写自己的函数吗?

请查看qsort

语法:

#包括
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; 
   }