插入排序_希尔排序_快速排序_冒泡排序_c算法.doc_第1页
插入排序_希尔排序_快速排序_冒泡排序_c算法.doc_第2页
插入排序_希尔排序_快速排序_冒泡排序_c算法.doc_第3页
插入排序_希尔排序_快速排序_冒泡排序_c算法.doc_第4页
插入排序_希尔排序_快速排序_冒泡排序_c算法.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

/排序#include int partions(int l,int low,int high)int prvotkey=llow;l0=llow;while (lowhigh) while (low=prvotkey) -high; llow=lhigh; while (lowhigh&llow=prvotkey) +low; lhigh=llow;llow=l0;return low;void qsort(int l,int low,int high)int prvotloc;if(lowhigh) prvotloc=partions(l,low,high); /将第一次排序的结果作为枢轴 qsort(l,low,prvotloc-1); /递归调用排序 由low 到prvotloc-1 qsort(l,prvotloc+1,high); /递归调用排序 由 prvotloc+1到 highvoid quicksort(int l,int n)qsort(l,1,n); /第一个作为枢轴 ,从第一个排到第n个void main()int a11=0,2,32,43,23,45,36,57,14,27,39;for (int b=1;b11;b+)printf(%3d,ab);printf(n);quicksort(a,11);for(int c=1;c0 & m4) system(cls); printf(tt*n); printf(tttt 排序方法选择n); printf(tt*n); printf(ttt请选择排序算法:1直接插入排序 n); printf(ttt请选择排序算法:2希尔排序 n); printf(ttt请选择排序算法:3冒泡排序 n); printf(ttt请选择排序算法:4快速排序n); printf(ttt请选择排序算法:5简单选择排序n); scanf(%d,&n); switch(n) case 1: printf( 直接插入排序前:n); for( j=1;jnumv;j+) printf(%d ,am-1j); printf( n直接插入排序结果为:n); BiInsertsort(am-1,numv-1); break; case 2: printf( n希尔排序前:n); for( j=1;jnumv;j+) printf(%d ,am-1j); printf( n希尔排序结果为:n); ShellSort(am-1, numv-1); break; case 3: printf( n冒泡排序前:n); for( k=1;knumv;k+) printf(%d ,am-1k); printf( n冒泡排序结果为:n); BubbleSort(am-1, numv-1); break; case 4: printf( n快速排序前:n); for( j=1;jnumv;j+) printf(%d ,am-1j); printf( n快速排序结果为:n); QuickSort(am-1,0,numv-1); for( i=1;inumv;i+) printf(%d ,am-1i); printf(n); break; case 5: printf( n简单选择排序前:n); for( j=1;jnumv;j+) printf(%d,am-1j); printf( n简单选择排序结果为:n); SelectSort(am-1,numv-1); break; default: printf(输入错误!); system(pause);/等待 m=0; system(cls); printf(tt*n); printf(tttt 排 序n); printf(tt*n); printf(ttt请选择测试数据类型:1正序 n ); printf(ttt请选择测试数据类型:2逆序n ); printf(ttt请选择测试数据类型:3随机n ); printf(ttt返回,请按4n ); printf(tt*n); scanf(%d,&m); if(m=4) printf(*_*) 再见!); else printf(输入错误!);二、排序方法选择void BiInsertsort(int r, int n) /插入排序(折半) for(int i=2;i=n;i+) if (riri-1) r0 = ri; /设置哨兵 int low=1,high=i-1; /折半查找 while (low=high) int mid=(low+high)/2; if (r0high;j-) rj+1 = rj; /后移 rj+1 = r0; for(int k=1;k=1;d=d/2) /以d为增量进行直接插入排序 for (int i=d+1;i0 & r0rj; j=j-d) rj+d = rj; /记录后移d个位置 rj+d = r0; for(int i=1;i=n;i+) printf(%d ,ri); printf(n);/*起泡排序*/void BubbleSort(int r, int n) int temp,exchange,bound; exchange=n; /第一趟起泡排序的范围是r0到rn-1 while (exchange) /仅当上一趟排序有记录交换才进行本趟排序 bound=exchange; exchange=0; for (int j=1; jrj+1) temp=rj; rj=rj+1; rj+1=temp; exchange=j; /记录每一次发生记录交换的位置 for(int i=1;i=n;i+) printf(%d ,ri); printf(n);int Partition(int r, int first, int end) /快速排序一次划分 int i=first; /初始化 int j=end; r0=rfirst; while (ij) while (ij & r0= rj) j-; /右侧扫描 ri=rj; while (ij & ri= r0) i+; /左侧扫描 rj=ri; ri=r0; return i; /i为轴值记录的最终位置/*快速排序*/void QuickSort(int r, int first, int end) if (firstend) /递归结束 int pivot=Partition(r, first, end); /一次划分 QuickSort(r, first, pivot-1); /递归地对左侧子序列进行快速排序 QuickSort(r, pivot+1, end); /递归地对右侧子序列进行快速排序 /*简单选择排序*/void SelectSort(int r , int n) int i,j,index,temp; for (i=1; in; i+) /对n个记录进行n-1趟简单选择排序 index=i; for (j=i+1; j=n; j+) /在无序区中选取最小记录 if (rjrindex) index=j; if (index!=i) temp=ri; ri=rindex; rindex=temp; for(i=1;i=n;i+) printf(%d ,ri); printf(n);#include#include#includestructtreechardata;structtree*lchild,*rchild;voidcreatetree(structtree*(*root)charch;ch=getchar();if(ch=#)*root=NULL;else*root=(structtree*)malloc(sizeof(structtree);(*root)-data=ch;createtree(&(*root)-lchild);createtree(&(*root)-rchild);intjudgetree(structtree*bt)inttag,rear,front;structtree*p=bt,Q50;if(p=NULL)return1;front=rear=0;Q+rear=p;while(front!=rear)p=Q+front;if(p-lchild&tag)Q+rear=p-lchild;elseif(p-lchild)return0;elsereturn1;if(p-rchild&tag)Q+rear=p-rchild;elseif(p-rchild)return0;elsereturn1;return1;voidprint1(structtree*t)if(t!=NULL)printf(%c,t-data);print1(t-lchild);print1(t-rchild);voidprint2(structtree*t)if(t!=NULL)print2(t-lchild);printf(%c,t-data);print2(t-rchild);voidprint3(structtree*t)if(t!=NULL)print3(t-lchild);print3(t-rchild);printf(%c,t-data);intmain()inty;structtree*bt;createtree(bt);y=judgetree(bt);if(y=1)printf(alln);elseif(y=0)printf(notalln);printf(priorn);print1(bt);printf(middlen);print2(bt);printf(lastn);print3(bt);return0;二叉树创建,判断和遍历#includeintmain()char*str=abc;char*p1,*p2,*p3;p1=p2=p3=str;for(;*p1!=0;p1+)for(;*p2!=0;p2+)for(;*p3!=0;p3+) if(*p1!=*p2)&(*p1!=*p3)&(*p2!=*p3)printf(%c%c%cn,*p1,*p2,*p3);p3=str;p2=str;return0;梦想纷飞16:14:47这个是字符串的那个,我只弄了个abc,就那花了很长时间搁浅16:15:09很不错了梦想纷飞16:15:18#include#includestructstackintdata;structstack*next;intemptystack(structstack*top)return(top?0:1);intgettop(structstack*top)if(top=NULL)printf(notdata!n);return0;return(top-data);structstack*push(structstack*top,intdata)structstack*p;p=(structstack*)malloc(sizeof(structstack);p-data=data;p-next=top;top=p;returntop;structstack*pop(structstack*top)structstack*p;if(top=NULL)printf(nottopn);returnNULL;p=top;top=top-next;free(p);returntop;intmain()inta5=1,2,3,4,5,i,empty;structstack*p;p=(structstack*)malloc(sizeof(structstack);p-data=1;p-next=NULL;for(i=1;i5;i+)p=push(p,ai);printf(%dn,getstack(p);p=pop(p);printf(%dn,getstack(p);return0;这是一个栈他让用数组做,我用指针和结构体做的#include#include#defineNUM_ITEMS10voidquickSort(intnumbers,intarray_size);voidq_sort(intnumbers,intleft,intright);intnumbersNUM_ITEMS;intmain()inti;/edrandomnumbergeneratorsrand(getpid();/fillarraywithrandomintegersfor(i=0;iNUM_ITEMS;i+)numbersi=rand();/performquicksortonarrayquickSort(numbers,NUM_ITEMS);printf(Donewithsort.n);for(i=0;iNUM_ITEMS;i+)printf(%in,numbersi);voidquickSort(intnumbers,intarray_size)q_sort(numbers,0,array_size-1);voidq_sort(intnumbers,intleft,intright)intpivot,l_hold,r_hold;l_hold=left;r_hold=right;pivot=numbersleft;while(left=pivot)&(leftright)right-;if(left!=right)numbersl

温馨提示

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

评论

0/150

提交评论