您的位置:首页 > 编程语言 > C语言/C++

c++实现归并排序

2016-03-26 11:45 489 查看
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int arr[100];
int n;
//排序
//归并排序  左排序右排序,归并(将两边最小的元素复制到原数组)

void merge(int arr[],int l,int mid,int r);
void mergeSort(int array[],int l,int r){
if(l<r){

int mid=(l+r)/2;
mergeSort(array,l,mid);
mergeSort(array,mid+1,r);
merge(array,l,mid,r);
}
}
void merge(int arr[],int l,int mid,int r){

int helperl=l;
int helperr=mid+1;
int helper[100];
for(int i=0;i<n;i++){
helper[i]=arr[i];
}
int k=l;
while(helperl<=mid&&helperr<=r)
{

if(helper[helperl]<=helper[helperr]){

arr[k]=helper[helperl];
helperl++;
}else {

arr[k]=helper[helperr];
helperr++;
}

k++;
}
for(int i=0;i<=mid-helperl;i++){
arr[k+i]=helper[helperl+i];

}

}

int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i];

}
mergeSort(arr,0,n-1);
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;

return 0;
}

来自程序员面试金典。

递归实现数组的归并排序。归并排序分两步,划分,归并。归并阶段创建辅助数组,将左半和右半最小的数依次写回原数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: