C语言中的通用编程
来源:互联网 发布:鲁班钢筋预算软件 编辑:程序博客网 时间:2024/05/01 12:22
一个简单的快排,随机化,尾递归的好像都没做,很久以前写的了,最近学Python的functional program又翻了出来,
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>void swap(void *vp1, void *vp2,int size){ char *cp = (char*)malloc(size); memcpy(cp,vp1,size); memcpy(vp1,vp2,size); memcpy(vp2,cp,size); }int cmp(void *vp1, void *vp2){ return *(int*)vp1 - *(int*)vp2;}void qsort(void *base,int n,int elemsize,int (*cmp)(void*, void*)){ int left = 0,right = n-1; void *pivot = malloc(elemsize); assert(pivot != NULL); memcpy(pivot,base,elemsize); while(left<right) { while(left<right && cmp((char*)base+elemsize*right,pivot)>0) right--; while(left<right && cmp((char*)base+elemsize*left,pivot)<=0) left++; swap((char*)base+elemsize*left,(char*)base+elemsize*right,elemsize); } free(pivot); swap(base,(char*)base+elemsize*right,elemsize); if(0<left-1) qsort(base,left,elemsize,cmp); if(left+1<n-1) qsort((char*)base+elemsize*(left+1),n-left-1,elemsize,cmp); return ;}int main(){ int a[10] = {16,4,10,14,7,9,3,2,8,1}; qsort(a,10,sizeof(int),cmp); for(int i=0;i<10;i++) { printf("%d ",a[i]); } return 0;}
0 0
- C语言中的通用编程
- Linux 文件编程及通用C语言的文件编程
- C语言编程中的双刃剑
- c语言中的编程经历
- C语言中的多线程编程
- C语言中的多线程编程
- C语言编程中的问题
- C语言中的多线程编程
- C语言编程中的缓冲区
- 双向循环链表 C语言通用编程的思考
- [C/Cpp/Java]编程语言的一些通用概念
- [草稿]浅谈通用软件中的数据安全问题(C语言)
- 单线程中的通用定时器(C语言)
- 通用C语言程序
- c语言通用Makefile
- 网络编程中的select优化通用C/S模型
- C语言编程中的重要问题
- C 语言在计算机编程中的地位
- 采用瀑布模型需要具备的项目特征
- poj2665
- POJ 3913 Gnome Sequencing G++
- poj2707
- hadoop平台搭建
- C语言中的通用编程
- poj2840
- ahk FileCopy
- poj2853
- poj2864
- myeclipse 2015代码提示
- poj2909
- poj3006
- poj3030