c语言 快速排序 和 二分 查找 模型
2015-07-10 11:37
1231 查看
引言:c语言中 stdlib 自定义了一个 qsort 快速排序函数 模型:int cmp(const void *a,const void *b);qsort(s,n,sizeof(s[0]),cmp);示例代码:
// #include<stdio.h> #include<stdlib.h> int cmp(const void* a, const void* b) { return *((int*)a) - *((int*)b); } //浜屽垎鏌ユ壘绠楁硶 int search(int* arr, int arr_len, int value) { int index = 0; int min = 0; int max = arr_len -1; int middle = 0; if(arr[min] == value) return min; else if (arr[max] == value) return max; while(min < max) { middle = (min + max)/2; if(arr[middle] > value) max = middle -1; else if(arr[middle] < value) min = middle + 1; else return middle; } } int main() { int a[] = {5,4,1,3,10,6,22,98,76,35}; qsort(a, sizeof(a)/sizeof(int), sizeof(int), cmp); int i =0; for(i; i< sizeof(a)/sizeof(int); i++) printf(" %2d, ", a[i]); printf(" \n"); int index = search(a, sizeof(a)/sizeof(int), 35); printf("index=%d, num=%d\n", index, a[index]); }
//结构体的 快速排序
#include<stdio.h>#include<string.h>typedef unsigned int uint32_t;typedef char uint8_t;typedef unsigned short uint16_t;typedef struct _BOOK{ char name[32]; int price;}Book;typedef struct _YOUXI{ int num; Book book[4];}YouXi;int cmp(void* a, void* b){ return ((YouXi*)a)->num - ((YouXi*)b)->num;}int main(){ YouXi you[4] = {{1,{"luchenfei", 32}}, {4,{"chunchun", 37}}, {3,{"lili", 39}}, {2,{"mingming", 34}}}; int i =0; for(i; i<4 ;i++) { printf("num=%d, name=%s, price=%d\n", you[i].num, you[i].book->name, you[i].book->price); }#if 1 qsort(you, 4, sizeof(YouXi), cmp); i =0; for(i; i<4 ;i++) { printf("num=%d, name=%s, price=%d\n", you[i].num, you[i].book->name, you[i].book->price); }#endif}结束语:二分查找 + 快速 排序 在 具体应用时候 还是很不错一个 算法, 比如 解析 地理信息库, ip段 和 地址的映射 关系, 用ip 的开始ip 快排, 然后在 用二分 去查找。。:关于 qsort c语言的 不同类型 double, 结构体 , 字符串 排序 参见博客: http://blog.sina.com.cn/s/blog_5155e8d401009145.html
相关文章推荐
- C++运算符重载(友元函数方式)
- C语言之基本算法24—黄金分割法求方程近似根
- C++ Socket编程步骤
- C++ 对进程各种操作函数
- C++MFC编程笔记day06 MFC向导、MFC绘图类使用
- C语言之基本算法23—二分法求方程近似根
- 实例分析用指针访问二维数组的几种方法
- c++primer要点-表达式
- C++中公有继承、保护继承、私有继承的区别
- chapter17test1
- c++primer要点-字符串、向量和数组
- C语言实现二叉树的递归遍历和非递归遍历
- C语言中结构体内存分配机制
- [转] 值得推荐的C/C++框架和库
- C++中关于使用到CString的若干问题
- C语言之基本算法22—穷举法求方程近似根
- 【C++】实现一个简洁版的class String
- 关于C++子类父类成员函数的覆盖和隐藏
- C++处理JSON示例
- c++primer 要点-变量和基本类型