排序算法_插入排序、归并算法

来源:互联网 发布:putty软件下载 编辑:程序博客网 时间:2024/05/19 10:55


//------------------插入排序---------------------------------template<typename T>void insertion_sort(T a[],int n)   //n:  数组大小{double temp;int i;for(int j=1;j<n;j++){temp=a[j];i=j-1;while (i>=0&&a[i]>temp){a[i+1]=a[i];i--;}a[i+1]=temp;}}//-----------------------------------------------//---------------------归并算法-------------------------template<typename T>void merge(T a[],int p, int q , int n)   //n:  数组大小{int n1=q-p+1;int n2 = n-q;int *l=new int[q-p+1];int *r=new int[n-q];for(int i =0 ;i<n1;i++){l[i]=a[p+i];}for(int j =0 ;j<n2;j++){r[j]=a[q+j+1];}l[n1]=2147483647;//当做正无穷r[n2]=2147483647;int ii=0;int jj=0;for(int k=p;k<=n;k++){if(l[ii]<=r[jj]){a[k]=l[ii];ii++;}else{a[k]=r[jj];jj++;}}}//--------------------------------------------template<typename T>void merge_sort(T a[],int p,int r){if(p<r){int q= (p+r)/2;merge_sort(a,p,q);merge_sort(a,q+1,r);merge(a,p,q,r);}}//---------------------------------------------------

例子:归并

{int a[100];   for(int i =0;i<100;i++) {  a[i]=rand()%1000; }      for(int i =0;i<100;i++) {   printf("%d  ",a[i]); if((i+1)%10==0) printf("\n"); }   printf("\n");   merge_sort(a,0,99);      for(int i =0;i<100;i++) {   printf("%d  ",a[i]); if((i+1)%10==0) printf("\n"); }   printf("\n");return 0;}





原创粉丝点击