码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-11 06:58:35      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:c语言   指针   回调函数   

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函数,回调函数

标签:c语言   指针   回调函数   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!