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

来源:互联网 发布:windows密码破解工具 编辑:程序博客网 时间:2024/06/06 09:43
/*快速排序的简单应用及回调函数的初步理解注:只是应用快速排序的算法回调函数: 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。(摘自百科)利用快速排序一个整型数组,一个浮点型数组,一个字符串数组。*///—、快速排序实现整型数组排序:#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