博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 语言泛型编程--quickSort实现
阅读量:5861 次
发布时间:2019-06-19

本文共 2591 字,大约阅读时间需要 8 分钟。

1 #ifndef _GENERICQUICKSORT_H_2 #define _GENERICQUICKSORT_H_3 void generic_swap(void * pa, void * pb, int typeSize);4 void generic_qsort(void * pa, int elemSize, int typeSize,5                             int (*cmp)(void *,void *));6 #endif
generic_quick_sort.h
1 #include 
2 #include
3 #include
4 #include "generic_quick_sort.h" 5 6 static void quick_sort(); 7 void generic_swap(void * pa, void * pb, int typeSize) 8 { 9 void * ptmp = malloc(typeSize);10 memcpy(ptmp,pa,typeSize);11 memcpy(pa,pb,typeSize);12 memcpy(pb,ptmp,typeSize);13 free(ptmp);14 }15 16 void generic_qsort(void *pa, int elemSize, int typeSize,17 int (*cmp)(void *, void *))18 {19 char *paa = (char*)pa;20 quick_sort(paa,0,elemSize-1,typeSize,cmp);21 }22 23 static void quick_sort(char *paa, int beg, int end, int typeSize,24 int (*cmp)(void *, void *))25 { 26 if(beg >= end)27 return;28 int mid = (beg+end)/2;29 g_swap(paa + end * typeSize, paa + mid * typeSize, typeSize);30 char *border = paa + end * typeSize;31 int i = beg;32 int j = beg;33 for(; j < end; j++)34 {35 if(cmp(paa+j*typeSize, border) < 0){36 g_swap(paa+j*typeSize, paa+i*typeSize,typeSize);37 i++;38 }39 }40 g_swap(paa+j*typeSize, paa+i*typeSize,typeSize);41 quick_sort(paa,beg,i-1,typeSize,cmp);42 quick_sort(paa,i+1,end,typeSize,cmp);43 }
generic_quick_sort.c
1 #include 
2 #include
3 #include
4 #include "generic_quick_sort.h" 5 #define PRINT_STUDENT(stu) \ 6 printf("name = %-10s, score = %-.2f\n",stu.name, stu.score) 7 8 enum {LEN=10}; 9 typedef struct student{10 char name[LEN];11 double score;12 }student;13 14 int cmp_stu(void *a, void *b);15 16 int main()17 { 18 student stu[5] = {19 {
"Linda", 76.14},20 {
"Angel",84.41},21 {
"Jim", 98.25},22 {
"Trump", 34.98},23 {
"Walle", 100}24 };25 generic_qsort(&stu,5,sizeof(student),cmp_stu);26 for(int i = 0; i < 5; i++){27 PRINT_STUDENT(stu[i]);28 }29 return 0;30 }31 32 int cmp_stu(void *a, void *b)33 {34 student * pa = (student *)a;35 student * pb = (student *)b;36 if(pa->score < pb->score)37 return -1;38 else if(pa->score > pb->score)39 return 1;40 else return 0;41 }
main

 

转载于:https://www.cnblogs.com/endenvor/p/8081841.html

你可能感兴趣的文章
Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
查看>>
Mac软件下载备忘
查看>>
java 泛型初探
查看>>
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
查看>>
就是一个表格
查看>>
找回使用Eclipse删除的文件
查看>>
rabbitmq 消息系统 消息队列
查看>>
集成spring3、hibernate4、junit
查看>>
URL与ASCII
查看>>
java读取properties配置文件
查看>>
UITableview中cell重用引起的内容重复的问题
查看>>
Windows7操作系统安装教程(图文)
查看>>
IOS Core Animation Advanced Techniques的学习笔记(三)
查看>>
除了模拟手术教学,VR在医疗领域如何应用?
查看>>
盘点5款Ubuntu监控工具解决CPU暴增问题
查看>>
java 测试IP
查看>>
用CSS做导航菜单的4个理由
查看>>
NOIP2015 运输计划 二分答案+Tarjan LCA+树上差分
查看>>
构建之法读后感
查看>>
基本信息项目目标文档
查看>>