C/C++中深入理解qsort

//void qsort(void* base, //指向了需要排序的数组的第一个元素
//                size_t num,//排序的元素个数
//                size_t size,//一个元素的大小,单位是字节
//                int (*cmp)(const void*,const void*)

//函数指针类型 - 这个函数指针指向的函数,能够比较base指向数组中的两个元素,原始数组中的元素会按照指定的比较函数的规则进行重新排列
//           );

在使用之前根据这个函数原型,我们要摘出个别重要的点来说一说

void*的指针

1.无具体类型的指针-可以接受任意类型的地址

2.这种类型的指针,不能直接进行指针运算,需要强制转换作为前提

3.这种类型的指针,不能直接解引用操作-正确方式 *(类型*)空指针名

qsort头文件

qsort全名quick sort,翻译成中文叫快速排序,时间复杂度为平均情况下 O(nlogn),最坏情况下可能达到 O(n^2),具体的时间复杂度可能因实现而异。在stdlib.h中,qsort是在原地排序,没有返回新的数组副本,而是直接修改原始数组中的元素顺序

比较函数规则

比较函数应该返回一个整数值,指示两个元素的大小关系。

  • 如果返回负数,表示第一个元素小于第二个元素。
  • 如果返回零,表示两个元素相等。
  • 如果返回正数,表示第一个元素大于第二个元素。

---------------------------------------------------------------------------------------------------------------------

通过上边的扩展,那么现在我们,观看一个qsort例子如下

int compare_int(const void* p1, const void* p2)
{
   return (*(int*)p1 -*(int *)p2);
}

void print(int arr[],int sz)
{
    int i = 0;
    for (i;i     {
        printf("%d ",arr[i]);
    }
}

test1()
{
    int arr[10] = { 9,8,7,6,5,4,3,2,1,0};
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, sz,sizeof(arr[0]), compare_int);
    print(arr,sz);
}

int main() 
{

    test1();

    return 0;
}

输出结果:0 1 2 3 4 5 6 7 8 9

你可能感兴趣的:(算法,数据结构)