应用回调函数实现冒泡排序既能排序字符串又能排序数 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    引言:通过参考c语言库函数qsort:

   

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

    完成回调函数实现冒泡排序字符串或数字:

    代码如下:

   

#include <stdio.h>#include <stdlib.h>#include <string.h>/*函数功能:以char类型交换两个元素,大小为size,

应用回调函数实现冒泡排序既能排序字符串又能排序数

。*/void swap(char *p1,char *p2,int size){ int i = 0; char tmp = 0; for(i = 0;i<size;i++) { tmp = *(p1+i); *(p1+i) = *(p2+i); *(p2+i) = tmp; }}/*函数功能:比较整数的回调函数。*/int compare_int(const void *elem1,const void *elem2){ return (*(int *)elem1) - (*(int *)elem2);}/*函数功能:比较字符串的回调函数。*/int compare_str(const void *elem1,const void *elem2){ return strcmp((char *)(*(int *)elem1), (char *)(*(int *)elem2));}/*函数功能:冒泡排序函数。*/void bubble_str_int(void *base,int size,int width,int ( *cmp )(const void *elem1, const void *elem2 )){ int i = 0; int j = 0; for(i = 0;i<size-1;i++) { for(j = 0;j<size-i-1;j++) { if(cmp(((char *)base+(j*width)),((char *)base+(j+1)*width))<0) { swap((char *)base+(j*width),(char *)base+(j+1)*width,width); } } }}int main(){ char *arr_str[] = {"ddddd","aaaaa","ccccc","bbbbb","zzzzz"}; int arr_int[] = {1,3,5,7,9,2,4,6,8,10}; int i = 0; int size_int = sizeof(arr_int)/sizeof(arr_int[0]); int size_str = sizeof(arr_str)/sizeof(arr_str[0]); bubble_str_int(arr_int,size_int,sizeof(arr_int[0]),compare_int); printf("bubble_sort int:\n"); for(i = 0;i<size_int;i++) { printf("%d ",arr_int[i]); } printf("\n"); bubble_str_int(arr_str,size_str,sizeof(arr_str[0]),compare_str); printf("bubble_sort string:\n"); for(i = 0;i<size_str;i++) { printf("%s\n",arr_str[i]); } system("pause"); return 0;}

最新文章