归并排序(原理分治)
纯新人有啥错误的还望大佬指出
1 确定分界点//一般取两端点中点
//以分界点为中心进行递归的话,需要保证分界点位于两端点中所以取值为两端点之和除以2
2 利用递归进行排序
//对左右两边进行递归
//递归的过程 使分化为最小的两个进行排序,实现数组在一定范围内有顺序,从而实现排序
3 合二为一
//将短排序(己排序)合为一个
C++代码:
#include <iostream> using namespace std; int n; int q[100100],tmp[100100]; void sort_(int q[],int l,int r) { if(l>=r) return ; int mid=(l+r)>>1; sort_(q.l,mid),sorr_(q,mid+1,r);//优先进行底层排序,底层排序使产生的数组tmp具有一定顺序 int i=l,j=mid+1,k=0; while(i<=mid&&j<=r)//有一个超出左右两边的范围就退出 if(q[i]<=q[j]) tmp[k++]=q[i++]; else tmp[k++]=q[j++]; while(i<=mid) tmp[k++]=q[i++];//防止i没完全传到tmp中 while(j<=r) tmp[k++]=q[j++];//同上 for(i=l;i<=r;i++) q[l]=tmp[i-l]; return ; } int main() { cin>>n; for(int i=0;i<n;i++) cin>>q[i]; sort_(q,0,n); for(int i=0;i<n;i++) cout<<q[i]<<' '; return 0; }

浙公网安备 33010602011771号