模仿qsort的功能实现一个通用的冒泡排序。
2018-03-28 17:27
435 查看
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <stdio.h>
int cmp(const void*n1, const void*n2) //判断n1,n2元素大小,n1比n2大返回正数;小返回负数,相同返回0
{
return *(char*)n1 - *(char*)n2; //升序
}
void Swap(char *buf1, char* buf2, int width) //交换每个字节
{
int i = 0;
for (i = 0; i < width; i++)
{
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
void bubble_sort(void*base, int sz, int width, int(*cmp)(const void* n1, const void*n2)) //模拟实现qsort
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
int ret = cmp(((char*)base + (j*width)), ((char*)base + (j + 1)*width));
if (ret>0)
{
Swap(((char*)base + (j*width)), ((char*)base + (j + 1)*width), width);
}
}
}
}
int main()
{
int arr[] = { 5, 4, 3, 2, 1 };
int i = 0;
char arr1[] = { 'z', 'l', 's', 'x', 'm' };
bubble_sort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp);
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
printf("\n");
bubble_sort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp);
for (i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
printf("%c ", arr1[i]);
}
printf("\n");
system("pause");
return 0;
}
#include<stdio.h>
#include <stdio.h>
int cmp(const void*n1, const void*n2) //判断n1,n2元素大小,n1比n2大返回正数;小返回负数,相同返回0
{
return *(char*)n1 - *(char*)n2; //升序
}
void Swap(char *buf1, char* buf2, int width) //交换每个字节
{
int i = 0;
for (i = 0; i < width; i++)
{
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
void bubble_sort(void*base, int sz, int width, int(*cmp)(const void* n1, const void*n2)) //模拟实现qsort
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
int ret = cmp(((char*)base + (j*width)), ((char*)base + (j + 1)*width));
if (ret>0)
{
Swap(((char*)base + (j*width)), ((char*)base + (j + 1)*width), width);
}
}
}
}
int main()
{
int arr[] = { 5, 4, 3, 2, 1 };
int i = 0;
char arr1[] = { 'z', 'l', 's', 'x', 'm' };
bubble_sort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp);
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
printf("\n");
bubble_sort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp);
for (i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
printf("%c ", arr1[i]);
}
printf("\n");
system("pause");
return 0;
}
相关文章推荐
- 模仿qsort的功能实现的一个通用的冒泡排序
- 【C】模仿 qsort 的功能实现一个通用的冒泡排序
- 模仿qsort的功能实现一个通用的冒泡排序。
- 模仿qsort() 实现一个通用排序函数:msort()
- 模仿qsort()实现一个通用的排序函数:msort()
- 【C语言】使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现
- 通用权限管理系统组件 中后一个登录的把前一个登录的踢掉功能的实现
- 一个通用WebService功能的实现与反射
- 【C++】通过模板实现一个通用的冒泡排序
- 如何抽取一个通用的Android Loading页面快速实现加载功能
- 使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。
- 我模仿了一个自助装机的页面,可是有一个功能一直实现不了。请求高手帮我看看。
- 模仿微软的一个拷贝文件功能(比较通用可以直接拿来用)
- 一个实现图片上传/产生缩略图/在上传图片上写字功能的完整页面代码
- 用html5页面引入了一个jquery插件,实现平板上的向上滑动加载更多的功能
- 用一个form表单实现一次性无限极分类添加功能
- DynamicXml -- 动态读取操作XML (一个从XML到Object的通用实现)
- 自定义一个集合类实现栈的功能--后进先出