20150124 【 Linux-C 函数指针 】 模拟快速排序程序--快排
2015-01-24 16:53
267 查看
快排的特点就是通用性;
只要你提供比较函数 cmp
它就能对任何类型的数据进行排序。
大一的时候很不解这玩意的原理,
现在总于知道了————>函数指针。。。
所以就手敲了一遍。
一个是标准的int数组排序,
另一个是结构体数组排序。
这里用宏定义控制。
只要你提供比较函数 cmp
它就能对任何类型的数据进行排序。
大一的时候很不解这玩意的原理,
现在总于知道了————>函数指针。。。
所以就手敲了一遍。
一个是标准的int数组排序,
另一个是结构体数组排序。
这里用宏定义控制。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> //#define USE_INT //定义 USE_INT 时,TYPE_T 改为 int #define TYPE_T people #define LEN_MAX 10100 const char alpha[] = "abcdefghijklnmopqrstuvwxyz"; const int alphaLen = sizeof(alpha)-1; typedef struct _people { int age; char name[123]; }people; void t_sort(TYPE_T *src, TYPE_T *aim, int n, int (*p)(const TYPE_T *x, const TYPE_T *y)) { int i=0, j=0, flag=0; TYPE_T tmp; TYPE_T *maxx=NULL, *temp=NULL; for(i=0; i<n; i++) { aim[i] = src[i]; } for(i=0; i<n; i++) { flag = i; for(j=i+1; j<n; j++) { if( (*p)(aim+j, aim+flag) ) flag = j; } tmp = aim[flag]; aim[flag] = aim[i]; aim[i] = tmp; } } TYPE_T src[LEN_MAX], aim[LEN_MAX]; int t_cmp(const TYPE_T *a, const TYPE_T *b) { #ifdef USE_INT return *a < *b; #else if( a->age == b->age ) return strcmp(a->name, b->name) < 0; return a->age < b->age; #endif } TYPE_T t_rand_num(void) { TYPE_T res; int i=0, len=5; #ifdef USE_INT res = rand()%0xFFFF; #else res.age = rand()%100+1; char ss[len+1]; for(i=0; i<len; i++) res.name[i] = alpha[ rand()%alphaLen ]; res.name[len] = '\0'; #endif return res; } int main(int argc, char **argv) { int i=0, n=0; srand( time(NULL) ); //for( ; ; ) { n = rand()%30 + 1; for(i=0; i<n; i++) { src[i] = t_rand_num(); } t_sort(src, aim, n, t_cmp); printf("一共 %d 个数:\n", n); for(i=0; i<n; i++) { #ifdef USE_INT printf("%d ", src[i]); #else printf("%3d %s\n", src[i].age, src[i].name); #endif } puts("-----------------------------"); for(i=0; i<n; i++) { #ifdef USE_INT printf("%d ", aim[i]); #else printf("%3d %s\n", aim[i].age, aim[i].name); #endif } puts("\n\n\n"); // sleep( 1 ); } return 0; }
相关文章推荐
- 简单LinuxC程序关于简单计算器(函数指针与回调函数)
- linux 系统下使用C程序实现时钟的函数
- 函数指针,让程序更灵活
- C程序(scanf函数应用、字符串中取小数、两文件COPY、指针操作、stdout、stdin、stderr、sscanf、sprintf函数)
- 6-2 程序填空(指针类型作为成员函数的参数)
- C程序中函数指针
- 一个C++程序例子——指向函数的指针、含有可变形参的函数(备查)
- 调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux & Windows)
- linux 为崩溃的程序生成core文件的相关函数,调用代码生成core dump file 但程序不用退出,gdb 分析core
- 让你费解的函数原型 - linux 下的 signal - 函数指针
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- [转载] linux启动分析(5)---C程序入口函数start_kernel
- linux下gethostbyname函数示例程序
- pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
- 程序性能调优之 怎样使用gprof和oprofile来分析 linux程序的性能(每个函数的调用次数与耗时)
- 高手帮我看看这个指向函数的指针的程序错误。。。。。。。谢谢
- 函数指针使用与直接函数调用对程序代码大小的影响
- 跟踪程序在Linux下的执行的函数调用
- 在Linux下获取当前运行程序可执行文件全路径(不使用real_path()函数)
- 调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux & Windows)