qsort排序的用法

//void Bubble_sort(int arr[], int sz)
//{
//    int i = 0;
//    for (i = 0; i < sz - 1; i++)//确定排序执行的次数
//    {
//        int j = 0;
//        for (j = 0; j < sz - 1 - i; j++)//确定每次排序两组元素的对比次数
//        {
//            int tmp = 0;
//            if (arr[j] > arr[j + 1])
//            {
//                tmp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = tmp;
//            }
//        }
//    }
//
//}
struct Stu
{
    char name[20];
    int age;

};
int cmp_int(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;//e1 e2 调用前需要类型转换
}
int cmp_float(const void* e1,const void* e2)
{
    return (int)(*(float*)e1 - *(float*)e2);//返回值 转换成int 类型
}
int cmp_Stu_by_age(const void* e1, const void* e2)
{

    return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;//e1 e2 调用前需要类型转换
}
int cmp_Stu_by_name(const void* e1, const void* e2)
{

    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);//e1 e2 调用前需要类型转换
    //strcmp(a,b),比较字符串的大小 a>b return 1,a=b return 0,a }
void test1()
{
    int arr[10] = { 0,9,7,6,8,5,4,3,2,1 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, sz, sizeof(arr[0]), cmp_int);//库函数 //cmp_int 返回的是int 类型
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
void test2()
{
    float f[] = { 9.0,7.0,5.0,3.0,2.0 };
    int sz = sizeof(f) / sizeof(f[0]);
    qsort(f, sz, sizeof(f[0]), cmp_float);//cmp_float 返回的是int 类型
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%f ", f[i]);
    }
    printf("\n");
}
void test3()
{
    struct Stu s[3] = { {"zhangsan",26},{"lisi",23},{"wangwu",25} };
    int sz = sizeof(s) / sizeof(s[0]);
    qsort(s, sz, sizeof(s[0]), cmp_Stu_by_name);
}
int main()
{
    test1();
    test2();
    test3();
    //Bubble_sort(arr, sz);
    char a = 0;
    void* p = &a;//void* 无类型指针 可以接收任意类型的地址
    //不能进行解引用操作,不能进行+ - 操作;
    return 0;
}

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