您的位置:首页 > 其它

mergesort

2015-10-22 12:19 369 查看
//
//  main.cpp
//  mergesort
//
//  Created by lingnan on 10/21/15.
//  Copyright (c) 2015 lingnan. All rights reserved.
//

#include <iostream>
using namespace std;
void merge(int arr[], int left, int mid, int right){
int n1 = mid - left +1;
int n2 = right - mid;
int a1[n1], a2[n2];
for(int i=0; i<n1; i++){
a1[i] = arr[left+i];
}
for(int j=0; j<n2; j++){
a2[j] = arr[mid+j+1];
}
int c_a= 0;
int c_b = 0;
int c = left;
while(c_a <n1 && c_b <n2){
if(a1[c_a] <= a2[c_b]){
arr[c++] = a1[c_a++];
}else{
arr[c++] = a2[c_b++];
}
}
while(c_a <n1){
arr[c++] = a1[c_a++];
}
while(c_b <n2){
arr[c++] = a2[c_b++];
}
}

void mergesort(int arr[], int left, int right){
if(left < right){
int mid = (right - left)/2 + left;
mergesort(arr, left, mid);
mergesort(arr, mid+1, right);
merge(arr, left, mid, right);
}
}

void printArray(int arr[], int n){
cout<<"The final result after mergesort is:"<<endl;
for(int i=0; i<n;i++) {
cout<< arr[i] <<" ";
}
}

int main(int argc, const char * argv[]) {
int arr[] = {3,21,5,3,2,5,3,6,454,7,3,63,4,645};
int n = sizeof(arr)/sizeof(arr[0]);
mergesort(arr, 0, n-1);
printArray(arr, n);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: