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

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;
}


你可能感兴趣的:(C语言,指针,回调函数)