快速排序的简单应用及回调函数的初步理解

/*快速排序的简单应用及回调函数的初步理解
注:只是应用快速排序的算法
回调函数: 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。(摘自百科)

利用快速排序一个整型数组,一个浮点型数组,一个字符串数组。*/
//—、快速排序实现整型数组排序:
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void *elem1, const void *elem2)//int_cmp就是回调函数
{
                 return *(int *)elem1-*(int *)elem2;//只要求返回一个正整数或者负数或者零,所以直接可以用指针进行运算。必须先将void *轻质转换才能运算
}
int main()
{
                 int arr[] = {1,3,5,7,9,2,4,6,8,0};
                 int i=0;
                 int sz=sizeof (arr)/sizeof(arr[0]);
                qsort(arr,sz, sizeof(int ),&int_cmp);//int_cmp前面加不加&都可以,因为函数名就是地址,加上&增强程序的可读性。
                 for(i=0;i<sz;i++)
                                printf( "%d ",arr[i]);
                system( "pause");
                 return 0;
}
//二、实现一个浮点型数组
#include<stdio.h>
#include<stdlib.h>
int float_cmp(const void *elem1, const void *elem2)
{
                 if((*(float *)elem1>*(float *)elem2))
                                 return 1;
                 else if ((*(float *)elem1==*( float *)elem2))
                                 return 0;
                 else
                                 return -1;
}
int main()
{
                 float arr[] = {0.2f, 1.5f, 9.0f, 8.8f, 0.0f};
                 int sz = sizeof (arr)/sizeof(arr[0]);
                 int i = 0;
                qsort(arr, sz, sizeof(float ), &float_cmp);
                 for(i=0; i<sz; i++)
                {
                                printf( "%f\n", arr[i]);
                }
                system( "pause");
                 return 0;
}
//三、实现一个字符串数组
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int str_cmp(const void *elem1, const void *elem2)
{

                 return strcmp(*(char **)elem1, *(char **)elem2);

}
int main()
{
                 char *arr[]={"abcdefgh" ,"abdcefg", "bbbbb"};
    int i=0;
                 int sz = sizeof (arr)/sizeof(arr[0]);
                qsort(arr,sz, sizeof(char *),str_cmp);//str_cmp的地址传给qsort
                 for(i=0;i<sz;i++)
                {
                                printf( "%s ",arr[i]);
                }
                system( "pause");
                 return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值