#include <iostream> using namespace std; void Merge(int SR[],int i,int m,int n)//n表示数组中最后一个元素的下标,i表示第一个元素的下标,m表示前一个数组最后一个元素的下标 { int *TR=new int[n-i+1]; int ptr1=i; int ptr2=m+1; int j=0; while(ptr1<=m&&ptr2<=n)//可能有一个没有完 { if(SR[ptr1]<=SR[ptr2]) { TR[j++]=SR[ptr1++]; } else{ TR[j++]=SR[ptr2++]; } } while(ptr1<=m)//此处为m!!! { TR[j++]=SR[ptr1++]; } while(ptr2<=n)//此处为n!!! { TR[j++]=SR[ptr2++]; } //for(int j=0;j<n-i+1;j++) //{ // cout<<TR[j];//j写成i了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //} int ptr=i; for(int j=0;j<n-i+1;j++)//此处j<n-i+1而不是n { SR[ptr++]=TR[j]; } } void MSort(int SR[],int s,int t) { if(s!=t) { int m=(s+t)/2; MSort(SR,s,m); MSort(SR,m+1,t);//加一 Merge(SR,s,m,t); } } int main() { int arr[]={4,2,1,9,2,5,7,8,10,34,5436,54,3235,435,435,4,3}; //Merge(arr,3,3,4); //cout<<sizeof(arr)/sizeof(arr[0]); MSort(arr,0,16); for(int i=0;i<17;i++) { cout<<" "<<arr[i]; } getchar(); return 0; }
时间: 2024-11-05 00:11:22