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

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值