首页 > 编程语言 > 详细

冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等

时间:2015-11-28 06:40:55      阅读:796      评论:0      收藏:0      [点我收藏+]

冒泡排序函数函数原型:

void bubble(void *base, size_t num, size_t width, int(*compare)(const void *num1, const void *num2));

功能:使用冒泡法排序对任意类型的数据排序

参数:1、待排序的数组的首地址

      2、数组中待排序元素的个数

      3、各元素占用空间的大小

      4、指向比较函数的指针,用于确定排序的顺序

compare函数的原型:int compare(const void *elem1,const void *elem2)

compare函数的返回值描述
小于0elem1将排在elem2的前面
等于0elem1等于elem2
大于0elem1将排在elem2的后面

以下只简单写出整形数组和字符串数组的比较函数,其他比较函数见本人博客的有关快排的比较函数的介绍,这两种排序的比较函数完全相同。(详见http://10740026.blog.51cto.com/10730026/1717611)

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

/*整形数组比较函数*/
int IntCmp(const void *num1, const void *num2)
{
	return ((*(int *)num1) > (*(int *)num2)) ? 1 : -1;
}

/*字符串数组比较函数*/
int StrCmp(const void*num1, const void *num2)
{
	return (strcmp((char *)(*(int *)num1), (char *)(*(int*)num2)) > 0) ? 1 : -1;
}

/*交换函数*/
void swap(size_t width, void *num1, void *num2)
{
	char tmp;
	for (int k = 0; k < (int)width; k++)
	{
		tmp = *((char *)num1 + k);
		*((char *)num1 + k) = *((char *)num2 + k);
		*((char *)num2 + k) = tmp;
	}
}

/*冒泡排序*/
void bubble(void *base, size_t num, size_t width, int(*compare)(const void *num1, const void *num2))
{
	int ret = 0;
	for (int i = 0; i < (int)num - 1; i++)
	{
		for (int j = 0; j < (int)num - 1 - i; j++)
		{
			ret = compare(((char *)base + j*width), ((char *)base + (j + 1) * width));
			if (ret > 0)
			{
				swap(width, ((char *)base + j*width), ((char *)base + (j + 1)*width));			
			}
		}
	}
}


int main()
{
        //整形数组的比较
        /*
	int arr[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
	bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), IntCmp);
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", arr[i]);
	}
        */
        
        //字符串数组的比较
	char *arr[4] = { "aaa", "ccc", "ddd", "bbb" };
	bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), StrCmp);
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%s ", arr[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}


冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等

原文:http://10740026.blog.51cto.com/10730026/1717597

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