(四)c++和JavaScript实现归并排序

来源:互联网 发布:姚明对奥尼尔数据 编辑:程序博客网 时间:2024/06/05 12:07
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>