常用排序算法
2015-06-06 14:27
274 查看
以下排序算法默认为从小到大进行排序:
1.快速排序:
3.堆排序:
1.快速排序:
#include<iostream> #include<cstdlib> #include<time.h> #define M 1000 using namespace std; void swap(int *a,int *b); void quacksort(int a[],int start,int end); int quack(int a[],int start,int end); int main(){ int n; int a[M]; cin >>n; srand((unsigned)time(NULL)); for(int i=0;i<n;i++){ a[i]=rand()%100; } for(int i=0;i<n;i++){ cout <<a[i]<<" ";//输出排序前的数字 } cout <<endl; quacksort(a,0,n-1); for(int i=0;i<n;i++){ cout <<a[i]<<" "; } return 0; } void quacksort(int a[],int start,int end){ if(start<end){ int mid=quack(a,start,end); quacksort(a,start,mid-1); quacksort(a,mid+1,end); } } int quack(int a[],int start,int end){ int i,j,k; j=start-1;//标记小于a[end]的数 for(i=start;i<end;i++){ if(a[i]<a[end]){ j++; swap(&a[j],&a[i]); } } swap(&a[j+1],&a[end]); return j+1; } void swap(int *a,int *b){ int c=*a; *a=*b; *b=c; }2.归并排序:
#include<iostream> #include<time.h> #include<cstdlib> #include<cstdio> #define M 1000 using namespace std; void merger(int a[],int start,int end); void merger_sort(int a[],int start,int temp,int end); int main(){ int n; int a[M]; cin >>n; srand((unsigned)time(NULL)); for(int i=0;i<n;i++){ a[i]=rand()%100; } for(int i=0;i<n;i++){ cout <<a[i]<<" "; } cout <<endl; merger(a,0,n-1); for(int i=0;i<n;i++){ cout <<a[i]<<" "; } return 0; } void merger(int a[],int start,int end){ int temp; if(start<end){ temp =(start+end)/2; merger(a,start,temp); merger(a,temp+1,end); merger_sort(a,start,temp,end); } } void merger_sort(int a[],int start,int mid,int end){ int i,j,k,n1,n2; n1 =mid -start+1; n2 =end - mid; int b[M],c[M]; for(i=0;i<n1;i++){ b[i]=a[start+i]; } for(j=0;j<n2;j++){ c[j]=a[mid+1+j]; } k=0,j=0; for(i=start;i<=end;i++){ if(b[k]<c[j]&&k<n1||j>=n2){ a[i]=b[k]; k++; }else if(b[k]>=c[j]&&j<n2||k>=n1){ a[i]=c[j]; j++; } } }
3.堆排序:
#include<iostream> #include<cstdlib> #include<time.h> #define MAXSIZE 1000 using namespace std; void heapsort(int a[],int length); void build_max_heap(int a[] ,int length); void max_heap(int a[],int i,int length); void swap(int *a,int *b); int main(){ int array[MAXSIZE]; int n,i; cin >>n; //ÊäÈëÊý×鳤¶È srand((unsigned)time(NULL)); for(i = 1;i<=n;i++){ //ÊäÈëÊý×é array[i]=rand()%100; } for(i=1;i<=n;i++){ cout <<array[i]<< " "; } cout <<endl; heapsort(array,n); for(i=1;i<=n;i++){ cout <<array[i]<< " "; } return 0; } void heapsort(int a[],int length){ int i; int temp; build_max_heap(a,length); for(i=length;i>=1;i--){ swap(&a[1],&a[i]); max_heap(a,1,i-1); } } void build_max_heap(int a[] ,int length){ int i; for(i=length/2;i>=1;i--){ max_heap(a,i,length); } } void max_heap(int a[],int i,int length){ int max=i; int left=2*i; int right=2*i+1; int temp; if(left<=length&&a[left]>a[max]) max=left; if(right<=length&&a[right]>a[max]) max=right; if(max!=i){ swap(&a[i],&a[max]); max_heap(a,max,length); } } void swap(int *a,int *b){ int c=*a; *a=*b; *b=c; }
相关文章推荐
- mysql忘记root密码怎么办
- c++运算符重载笔记
- Android--taskAffinity属性
- What is Servlet Container
- 国内代码托管平台
- 设计模式-单例模式
- What is a servletcontext
- Linux中安装Cisco Packet Tracer
- 自定义属性加上的
- 欢迎使用CSDN-markdown编辑器
- Ajax的简单介绍
- hdu 1003
- Ubuntu 下安裝最新版本的 Git
- 我只想安安静静的做一个编程的美男子
- 在eclipse中添加myeclipse插件
- tomcat配置jenkins遇到的问题
- Win7 启动Rational Rose 2003 报错:No license features were found on server...
- 设计模式----观察者模式Observer(C++)
- leetcode--Compare Version Numbers
- 编写Matlab过程中一些实用的小知识,记录下