c++实现
#include <iostream>
#include "SortTestHelper.h"
#include "InsertionSort.h"
using namespace std;
template<typename T>
void __merge(T arr[], int l, int mid, int r){
T aux[r-l+1];
for( int i = l ; i <= r; i ++ )
aux[i-l] = arr[i];
int i = l, j = mid+1;
for( int k = l ; k <= r; k ++ ){
if( i > mid ) { arr[k] = aux[j-l]; j ++;}
else if( j > r ){ arr[k] = aux[i-l]; i ++;}
else if( aux[i-l] < aux[j-l] ){ arr[k] = aux[i-l]; i ++;}
else { arr[k] = aux[j-l]; j ++;}
}
}
template<typename T>
void __mergeSort(T arr[], int l, int r){
if( l >= r )
return;
int mid = (l+r)/2;
__mergeSort(arr, l, mid);
__mergeSort(arr, mid+1, r);
__merge(arr, l, mid, r);
}
template<typename T>
void mergeSort(T arr[], int n){
__mergeSort( arr , 0 , n-1 );
}
javascript实现
//假装传了int数组
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
</head>
<body>
<script>
function merge(arr,l,mid,r){
if(l>=r){
return;
}
var temp=new Array();
for(var i=0;i<=r-l;i++){
temp[i]=arr[l+i];
}
var i=l;
var j=mid+1;
for(var k=l;k<=r;k++){
if(i>mid){
arr[k]=temp[j-l];
j++;
}else if(j>r){
arr[k]=temp[i-l];
i++;
}else if(temp[i-l]>temp[j-l]){
arr[k]=temp[j-l];
j++;
}else{
arr[k]=temp[i-l];
i++;
}
}
}
function mergeSort(arr,l,r){
var n=arr.length;
var mid=Number.parseInt((r+l)/2);
if(r<=l){
return;
}
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
merge(arr,l,mid,r);
}
var arrEX=[4,1,3,10,9,3,6,4,19,12,11,14,48,99,56,45];mergeSort(arrEX,0,arrEX.length-1);
alert(arrEX);
</script>
</body>
</html>
#include <iostream>
#include "SortTestHelper.h"
#include "InsertionSort.h"
using namespace std;
template<typename T>
void __merge(T arr[], int l, int mid, int r){
T aux[r-l+1];
for( int i = l ; i <= r; i ++ )
aux[i-l] = arr[i];
int i = l, j = mid+1;
for( int k = l ; k <= r; k ++ ){
if( i > mid ) { arr[k] = aux[j-l]; j ++;}
else if( j > r ){ arr[k] = aux[i-l]; i ++;}
else if( aux[i-l] < aux[j-l] ){ arr[k] = aux[i-l]; i ++;}
else { arr[k] = aux[j-l]; j ++;}
}
}
template<typename T>
void __mergeSort(T arr[], int l, int r){
if( l >= r )
return;
int mid = (l+r)/2;
__mergeSort(arr, l, mid);
__mergeSort(arr, mid+1, r);
__merge(arr, l, mid, r);
}
template<typename T>
void mergeSort(T arr[], int n){
__mergeSort( arr , 0 , n-1 );
}
javascript实现
//假装传了int数组
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
</head>
<body>
<script>
function merge(arr,l,mid,r){
if(l>=r){
return;
}
var temp=new Array();
for(var i=0;i<=r-l;i++){
temp[i]=arr[l+i];
}
var i=l;
var j=mid+1;
for(var k=l;k<=r;k++){
if(i>mid){
arr[k]=temp[j-l];
j++;
}else if(j>r){
arr[k]=temp[i-l];
i++;
}else if(temp[i-l]>temp[j-l]){
arr[k]=temp[j-l];
j++;
}else{
arr[k]=temp[i-l];
i++;
}
}
}
function mergeSort(arr,l,r){
var n=arr.length;
var mid=Number.parseInt((r+l)/2);
if(r<=l){
return;
}
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
merge(arr,l,mid,r);
}
var arrEX=[4,1,3,10,9,3,6,4,19,12,11,14,48,99,56,45];mergeSort(arrEX,0,arrEX.length-1);
alert(arrEX);
</script>
</body>
</html>