qsort排序
标签: C语言
学习人数: 10.9k

学习前小建议:qsort了解就行,实战的时候建议用sort。

/* qsort example */
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* qsort */

int values[] = { 40, 10, 100, 90, 20, 25 };

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

int main ()
{
  int n;
  qsort (values, 6, sizeof(int), compare);
  for (n=0; n<6; n++)
  printf ("%d ",values[n]);
  return 0;
}

其中qsort的参数void* base是传入一个数组,size_t num 为数组整体大小,size_t size 为单个元素的大小,int (*compar)(const void*,const void*)是需要使用者去完成的一个比较函数

针对这个函数,在不同类型的数组中需要用不同的处理方式,来保证数组中的元素大小不会失真(例如在处理double型的数组时就需要用不同的方式来进行)

比较函数的返回值是;

return value meaning
<0 The element pointed to by p1 goes before the element pointed to by p2
0 The element pointed to by p1 is equivalent to the element pointed to by p2
>0 The element pointed to by p1 goes after the element pointed to by p2

对 int 类型的数组排序

//qsort函数
#include <stdio.h>
#include<stdlib.h>
//qsort函数实现int型排序
//qosrt函数的使用者得实现一个比较函数 
int int_cmp(const void * p1, const void * p2) 
{   
    return (*( int *)p1 - *(int *) p2); 
}

int main() 
{ 
    int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
    qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    { 
        printf("%d ", arr[i]); 
    }
   ...
登录查看完整内容


课后作业


登录后开始许愿

暂无评论,来抢沙发