【C语言】 使用回调函数实现冒泡排序
2015-11-29 16:03
627 查看
实现功能:既能排序整型数,也可以排序字符串 代码如下: #include <stdio.h> #include <string.h> int int_cmp(const void *p1, const void *p2) { if (*(int *)p1 > *(int *)p2) { return 1; } else if (*(int *)p1 == *(int *)p2) { return 0; } else { return -1; } } void swap(void *p1, void *p2, int size) { int i = 0; for (i = 0; i < size; i++) { char tmp = *((char *)p1 + i); *((char *)p1 + i) = *((char *)p2 + i); *((char *)p2 + i) = tmp; } } void bubble(void *base, int count, int size, int(*cmp)(const void *, const void *)) { int i = 0; int j = 0; for (i = 0; i < count - 1; i++) { for (j = 0; j < count - i - 1; j++) { if (cmp((char *)base +size*j,(char *)base+size*(j+1))>0) { swap((char *)base + size*j, (char *)base + size*(j + 1), size); } } } } int str_cmp(const void *p1, const void *p2) { return strcmp((char *)(*(int *)p1), (char *)(*(int *)p2)); } int main() { //int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 }; char *arr[] = { "dddd", "bbbb", "cccc", "aaaa" }; int i = 0; bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(char *), str_cmp); for (i = 0; i < 4; i++) { printf("%s\n", arr[i]); } printf("\n"); return 0; }
本文出自 “Vs吕小布” 博客,谢绝转载!
相关文章推荐
- c语言基础篇(一)
- c++11中的委派构造函数
- C语言解释器Java版-1-内存分配
- c++11中的右值引用以及移动构造
- 【C语言】递归实现栈的逆序及排序
- for循环 数组下标越界导致死循环
- c++11中的using关键字
- 编译原理(七) 算符优先分析法(构造算符优先关系表算法及C++实现)
- c++11中decltype的妙用
- bitset应用---产生1万个不重复的随机数
- c++11中的智能指针
- c++模板实现多参数任意传 - 类实现
- effective c++ 笔记之static_cast
- vs2008 dlib编译问题USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE
- 【C++】满二叉树与完全二叉树的区别及判断
- C++引用方式实现两个值的互换
- C++运算符重载
- C++抛出异常与传递参数的区别
- C++抛出异常与传递参数的区别
- C++【线程同步】-临界区同步