首页 > 其他 > 详细

关于实现qsort函数,回调函数

时间:2015-12-11 06:57:04      阅读:287      评论:0      收藏:0      [点我收藏+]

qsort函数原型

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

其中compare为比较函数的函数指针

    width为字节大小

    elem1和elem2分别为两个需要比较的元素地址

    num为比较的元素个数

1.快速排序整形数组

#include<stdio.h>
#include<stdlib.h>

int int_cmp(const void*elem1, const void *elem2)//整形比较
{
	return (*(int*)elem1 - *(int*)elem2);	
}

int main()
{
	int arr[10] = {1,3,5,7,9,2,4,6,8,0};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	//快速排序
	qsort(arr, sz, sizeof(int), int_cmp);
	for (i = 0; i < sz; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
	
	system("pause");
	return 0;
}

2.快速排序字符数组

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int int_cmp(const void*elem1, const void *elem2)//整形比较
{
	return (*(int*)elem1 - *(int*)elem2);
}

int str_cmp(const void*elem1, const void *elem2)//字符串比较
{
	return strcmp((char*)*(int *)elem1,(char*)*(int *)elem2);
}

int main()
{
	char *arr[] = { "dddd", "aaaa","ccccc", "bbbb" };//每个字符串产生一个首字符地址,                                                         //放到arr数组里
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	qsort(arr, sz, sizeof(char*), str_cmp);
	//若在传函数参数的地方写成strcmp,strcmp返回值类型为char*,而qsort里的函数返回类型        //void*,比较两元素的地址传进去
	for (i = 0; i < sz; i++)
	{
		printf("%s", arr[i]);
	}
	
	system("pause");
	return 0;
}


本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1721863

关于实现qsort函数,回调函数

原文:http://10797127.blog.51cto.com/10787127/1721863

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!