归并排序

mac2022-06-30  27

void merge(vector<int> &data, int start, int mid, int end)//将两个有序数组data[start,..mid]和data[mid+1,..,end]合并 { //int *temp=new(nothrow) int[end-start+1]; //if(!temp) //{ //内存分配失败 // cout<<"error"; // return; // } vector<int> temp(end-start+1); int i = mid, j = end, k = end-start;//从后向前,大的放在temp中,注意k的起始位置 while (i>=start&&j>=mid+1) { if (data[i]>=data[j]) { temp[k--] = data[i--]; } else { temp[k--]=data[j--]; } } while (i>=start)//当其中一个数组完成后将另一个数组复制 { temp[k--] = data[i--]; } while (j>=mid+1) { temp[k--] = data[j--]; } for (int i = start,k=0; i <= end; i++,k++) { data[i] = temp[k]; } //delete []temp; } void mergesort(vector<int> &data, int start, int end) { if (start<end) { int mid = (start+end)/2; mergesort(data, start, mid); mergesort(data, mid+1,end); merge(data, start, mid, end); } } int main() { int n; while (cin>>n) { vector<int>data(n); for (int i = 0; i < n; i++) { cin>>data[i]; } int start = 0,end = n-1; mergesort(data,start,end); cout<<data[0]; for (int i = 1; i < n; i++) { cout<<" "<<data[i]; } } return 0; }

 

最新回复(0)