关闭

【C语言】使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。

标签: c语言冒泡排序函数
298人阅读 评论(0) 收藏 举报
分类:
//使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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[] = { "love","you","我","欢","喜" };
	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;
}

1
0
查看评论

自己完成一个冒泡排序(bubble_sort),可以完成不同类型数据的排序

冒泡排序我们都知道,就是比较相邻的数字大小,将数组从小到大排序。(前面的博客写过这个排序),那要是用冒泡排序完成不同类型的数据的排序呢? 这一下子就让我想到了sqort,上一篇博客才写过这个函数,特别是这个函数的参数,其中最后一个参数就是一个函数指针,可以指向不同的函数。那么我们可不可以用冒泡排序...
  • jhcconan614
  • jhcconan614
  • 2016-12-02 14:59
  • 558

编写函数,实现冒泡排序

使用 JavaScript 编写的冒泡排序函数如下所示: function bubbleSort(arr) { for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr.leng...
  • u012396955
  • u012396955
  • 2016-12-29 16:46
  • 880

写一个通用的冒泡排序函数

提到通用,我们首先想到的就是模板了。 函数内部就是冒泡排序的实现了,我们看一下。//我们先写一个升序排列,一会再对它进行改造一下 template<typename T> void BubbleSort(T*arr,size_t size) { for (size_t i = ...
  • lizhidefengzi
  • lizhidefengzi
  • 2017-03-21 02:46
  • 867

【C】模仿 qsort 的功能实现一个通用的冒泡排序

#define _CRT_SECURE_NO_WARNINGS 1 #include #include int cmp(const void*n1, const void*n2) //判断n1,n2元素大小,n1比n2大返回正数;小返回负数,相同返回0 { return *...
  • qq_37924645
  • qq_37924645
  • 2017-05-13 20:41
  • 180

冒泡排序实现整数数组的排序

冒泡排序:是一种从后往前的排序方法,比较相邻的两个数,如果第一个比第二个大就交换它们,依次往下比较,一趟下来就确定了最后的的元素(该数组的最大数)。若该数组有n个元素,需进行n-1趟排序,第i趟比较的次数为n-i次。 eg:5 4 3 2 1 //5个元素    &...
  • xs_520
  • xs_520
  • 2016-09-01 15:53
  • 395

使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。

冒泡排序我们都知道,就是比较相邻的数字大小,将数组从小到大排序。(前面的博客写过这个排序),那要是用冒泡排序完成不同类型的数据的排序呢?  这一下子就让我想到了sqort,上一篇博客才写过这个函数,特别是这个函数的参数,其中最后一个参数就是一个函数指针,可以指向不同的函数。那么我们可不可...
  • lu_1079776757
  • lu_1079776757
  • 2017-07-18 15:02
  • 258

c语言:编写冒泡排序,排序一个整形数组(从小到大)

程序:不妨按从小到大排序#include stdio.h>int main (){ int a[10]; int i = 0; int j = 0; in...
  • yanxiaolx
  • yanxiaolx
  • 2016-05-29 13:34
  • 4537

实现不同类型的冒泡排序

一、按照qorst函数的原理实现不同类型的数组的排序。 qorst函数是库函数,可以实现快速排序。 在MSDN下类型为 void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void...
  • f2016913
  • f2016913
  • 2016-11-21 12:37
  • 549

C语言:冒泡排序法(升序排序法)

任务代码: 执行情况: 知识总结: 冒泡排序法:也叫升序排序法,但是相比起二分法查找只能应用于有序数列,二如何将一个无序数列变的有序就可以使用冒泡排序法!!! 对上面的过程进行总结: 该思想体现在成续上的解法是: 实例: 冒泡排序不仅仅可以应用于数字同样可以应用于...
  • Zzwtyds
  • Zzwtyds
  • 2017-07-26 17:58
  • 1673

C语言 利用函数调用进行排序——冒泡法

//Title冒泡排序,利用函数调用 //Author: //flyingostrich //Data: //Tuesday 26-August-2014 //Environment: //Codeblocks #include #define M 10//宏定义修改M的值 ...
  • flyingostrich
  • flyingostrich
  • 2014-08-26 20:20
  • 1441
    个人资料
    • 访问:9928次
    • 积分:532
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    文章分类