几种排序的源代码
2015-07-21 22:25
141 查看
void bubble_sort(int* a,int len) { int up=0; int down=len-1; int i,temp; while(up<down) { for(i=up+1;i<down;i++) { if(a[i-1]>a[i]) { temp=a[i-1]; a[i-1]=a[i]; a[i]=temp; } } for(i=down-1;i>=up;i--) { if(a[i]>a[i+1]) { temp=a[i+1]; a[i+1]=a[i]; a[i]=temp; } } up++; down--; } } void insert_sort(int* a,int len)//基本思想在已经排好序的数组里插入元素 { int i,j,tmp; for(i=1;i<=len-1;i++) { tmp=a[i]; for(j=i-1;j>=0;j--) { if(a[j]>=tmp) { a[j+1]=a[j]; }else { break; } } a[j+1]=tmp; } } void quick_sort(int* a,int start,int end) { if(a==NULL||start>=end) return; int i,j,mid,key,tmp,pos; i=start; j=end; mid=(start+end)/2; key=a[mid]; pos=mid; while(i<j) { while(a[i]<=key&&i<pos) { i++; } if(a[i]>key) { tmp=a[pos]; a[pos]=a[i]; a[i]=tmp; pos=i; } while(a[j]>=key&&j>pos) { j--; } if(a[j]<key) { tmp=a[pos]; a[pos]=a[j]; a[j]=tmp; pos=j; } } quick_sort(a,start,pos-1); quick_sort(a,pos+1,end); } ////////////////////////////////////////////////////////////////////////////////////////// void adjustdown(int* a,int p,int end) { int left,i,tmp; left=2*p+1; i=p; while(left<=end) { if(left+1>end&&a[left]<=a[i]) { break; }else if(left+1<=end&&a[i]>=a[left]&&a[i]>=a[left+1]) { break; }else if(left+1>end&&a[left]>a[i]) { tmp=a[left]; a[left]=a[i]; a[i]=tmp; i=left; left=2*i+1; }else if(left+1<=end&&a[i]<a[left]&&a[left+1]<=a[left]) { tmp=a[left]; a[left]=a[i]; a[i]=tmp; i=left; left=2*i+1; }else if(left+1<=end&&a[i]<a[left+1]&&a[left]<=a[left+1]) { tmp=a[left+1]; a[left+1]=a[i]; a[i]=tmp; i=left+1; left=2*i+1; }else { break; } } } void heap_sort(int* a,int len) { int i,tmp; for(i=(len-1)/2;i>=0;i--) { adjustdown(a,i,len-1); } for(i=len-1;i>=1;i--) { tmp=a[i]; a[i]=a[0]; a[0]=tmp; adjustdown(a,0,i-1); } }
<pre name="code" class="cpp">void sort(int *a,int len){ int up=0; int down=len-1; int cnt; while(up<down){ for(cnt=up;cnt<down;cnt++){ if(a[cnt]>a[cnt+1]){ a[cnt]^=a[cnt+1]; a[cnt+1]^=a[cnt]; a[cnt]^=a[cnt+1]; } } for(cnt=down;cnt>0;cnt--){ if(a[cnt]<a[cnt-1]){ a[cnt]^=a[cnt-1]; a[cnt-1]^=a[cnt]; a[cnt]^=a[cnt-1]; } } up++; down--; } } void mergesort(int *a,int *b,int *c){ sort(a,N); sort(b,M); int cnt=0,n=0,m=0; while(n<N||m<M){ if(n==N){ c[cnt++]=b[m]; m++; continue; } if(m==M){ c[cnt++]=a ; n++; continue; } if(a ==b[m]){ c[cnt++]=a ; c[cnt++]=b[m]; n++; m++; continue; } if(a <b[m]){ c[cnt++]=a ; n++; continue; } if(a >b[m]){ c[cnt++]=b[m]; m++; continue; } } c_len=cnt; }一个不错的国外排序图示解释网站:http://visualgo.net/sorting.html
相关文章推荐
- Qt MVC学习 模型子类化参考(三)
- C++中的引用
- Selenium学习笔记之005:第一个selenium+python+webdriver脚本
- eclipse中更改默认编码格式
- Github for Windows
- 13. JavaSE-多态 & 内部类
- [Spring MVC] - JSP + Freemarker视图解释器整合(转)
- C语言输入下标数,把下标值改成0并放到最后,再依次打印。
- C#如何获取当前项目的目录,并以当前为根进行修改
- spring事务管理-摘抄
- autoi java实现
- 在Visual C++中使用内联汇编
- struts(五) 使用通配符 接收参数
- C#窗体无法接受Keydown事件
- The introduction to Web.config of ASP.NET #Reprinted#
- Java里public static void main(String[] args)与public static void main(String args[])的区别(by 星空武哥)
- C++ Primer 复习杂记(第二章)
- 自己实现的atof()和atoi()代码
- 【80X86汇编语言学习】【DOS功能调用】基本IO功能
- Xadmin文档(二)