8

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

4

6 回答 6

14

查看 qsort

句法:

#include <stdlib.h>
void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );

描述:

qsort()函数使用 Quicksort 对 buf(包含 num 个项目,每个项目的大小大小)进行排序。compare 函数用于比较 buf 中的项目。如果第一个参数小于第二个参数,compare 应该返回负数,如果它们相等则返回零,如果第一个参数大于第二个参数,则比较应该返回正数。qsort() 按升序对 buf 进行排序。

于 2012-07-17T14:37:26.517 回答
9

您可以qsortstdlib.h. 它是一种快速排序算法,平均时间复杂度为 O(nlogn),最坏情况复杂度为 O(n 2 )。C99 标准甚至更新的C11标准不要求函数的实现或时间复杂度。但是,常见的实现很可能会使用产生平均情况 O(nlogn) 时间复杂度的算法(这是通过比较进行排序的最佳选择)。

您可以使用它对任何类型的数组(甚至struct)进行排序 - 但您必须提供一个比较函数来比较数组的 2 个元素。

于 2012-07-17T14:38:18.517 回答
6

qsort是众所周知的。还有其他的,如堆排序、合并排序等。请查看链接以获取更多详细信息。

请注意,它们都将比较函数作为输入,这使得它们很容易与原生数据类型以及用户创建的数据类型一起使用。

于 2012-07-17T14:38:21.393 回答
3

是的:qsort。它在stdlib.h

于 2012-07-17T14:37:40.753 回答
2
 #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; 
   } 
于 2019-10-14T00:09:44.903 回答
0

简单的语法:

int function (const void * a, const void * b) {return ( *(int*)a-(int*)b);}
`qsort(arr_name , sizeofarray , sizeof(int), function);
于 2017-04-10T22:13:26.917 回答