常用排序算法的C语言实现.docx_第1页
常用排序算法的C语言实现.docx_第2页
常用排序算法的C语言实现.docx_第3页
常用排序算法的C语言实现.docx_第4页
常用排序算法的C语言实现.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常用排序算法的C语言实现 /QuickSort快速排序 /BubbleSort冒泡排序 /InsertSort插入排序 /ShellSort希尔排序 /MegeSort归并排序 /HeapSort堆排序/BucketSort桶排序/RadixSort基数排序#include#include/*快速排序*/void QuickSort(int* a, int p, int q) int k,m,n,tmp; if(pq) k=aq; for(m=p,n=p;mq;m+) if(amk) tmp=am; am=an; an=tmp; n+; aq=an; an=k; QuickSort(a,p,n-1); QuickSort(a,n+1,q); /*冒泡排序*/void BubbleSort(int*a ,int n) int i,j; int tmp; if(n2) return ; for(i=0;in;i+) for(j=0;jaj+1) tmp=aj; aj=aj+1; aj+1=tmp; /*插入排序*/void InsertSort(int* a, int n) int i,j,k; if(n2) return ; for(i=1;i=0;j-) if(kaj) aj+1=aj; else aj+1=k; break; if(j1) d=(d+1)/2; for(i=0;in-d;i+) if(ai+dai) tmp=ai; ai=ai+d; ai+d=tmp; /*堆排序*/static void HeapAdjust(int* a, int i, int n) int lc=2*i+1; int rc=2*i+2; int M=i; int tmp; if(i=(n/2-1) if(lcai) M=lc; if(rcaM) M=rc; if(i!=M) tmp=aM; aM=ai; ai=tmp; HeapAdjust(a,M,n); static void BuildHeap(int* a, int n) int i; for(i=(n/2-1);i=0;i-) HeapAdjust(a,i,n); void HeapSort(int*a,int n) int i,tp; BuildHeap(a,n); for(i=n-1;i=0;i-) tp=ai; ai=a0; a0=tp; HeapAdjust(a,0,i); PrintA(a,13); /*桶排序(桶排序是一个已知范围排序,这里假设范围为0-99)*/void BucketSort(int* a, int n) int b100=0;/使用10个桶分别表示0-9 int i,j; for(i=0;in;i+) bai+=1; for(i=0,j=0;i100;i+) if(bi!=0) while(bi) aj+=i; bi-=1; /*基数排序:注意内存泄露(Max_W表示的是所排序元素的最大的元素有多少位)*/void RadixSort(int* a, int n, int Max_w) typedef struct LIST int val; struct LIST *next; List; int i,j,d; List r10; List *p,*q; for(i=0;i10;i+) ri.val=0; ri.next=NULL; for(i=0;inext!=NULL) p=p-next; p-next=(List *)malloc(sizeof(struct LIST); p-next-val=ai; p-next-next=NULL; for(i=0,j=0;inext!=NULL) aj+=p-next-val; p=p-next; while(ri.next!=NULL)/回收内存 p=&ri; q=p; while(p-next!=NULL) q=p; p=p-next; if(p!=q) free(p); q-next=NULL; for(j=1,d=1;jMax_w;j+) d=d*10; for(i=0;inext!=NULL) p=p-next; p-next=(List *)malloc(sizeof(struct LIST); p-next-val=ai; p-next-next=NULL; for(i=0,j=0;inext!=NULL) aj+=p-next-val; p=p-next; while(ri.next!=NULL)/回收内存 p=&ri; q=p; while(p-next!=NULL) q=p; p=p-next; if(p!=q) free(p); q-next=NULL; /*归并排序*/static void mege_init(int* a, int st, int mi, int en) int n1=mi-st+1; int n2=en-mi; int i,j,k; int *lef=(int*)malloc(n1*sizeof(int); int *rig=(int*)malloc(n2*sizeof(int); if(lef=NULL|rig=NULL) return ; for(i=0;in1;i+) lefi=ai+st; for(i=0;in2;i+) rigi=ai+mi+1; i=0; j=0; k=st; while(in1&jn2) if(lefirigj) ak=lefi+; else ak=rigj+; k+; while(in1) ak+=lefi+; while(jn2) ak+=rigj+; free(lef); free(rig);void MegeSort(int* a, int st, int en) int r; if(sten) r=(st+en)/2; MegeSort(a,st,r); MegeSort(a,r+1,en); mege_init(a,st,r,en); 测试函数int main() int a=52,28,57,68,98,19,27,46,85,39,72; PrintA(a,sizeof(a)/sizeof(int); /QuickSort(a,0,sizeof(a)/sizeof(int); /BubbleSort(a,sizeof(a)/sizeof(int); /InsertSort(a,sizeof(a)/sizeof(int); /ShellSort(a,sizeof(a)/sizeof(int); /MegeSort(a,0,sizeof(a)/sizeof(int); /HeapS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论