归并排序是一种稳定排序,有必要掌握它;以下是详细代码加注释。先看一张归并排序算法对待排序数组的分割:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>归并排序</title>
</head>
<body>
<script type="text/javascript">
//归并排序:首先把数组分成两半,再分两半,一直到不可分,数组长度为1;
//接着调用merge函数,对左右数组排序,然后递归,最后实现整个数组的归并排序。
function mergeSort(arr) {
var len = arr.length;
if(len > 1) {
var index = Math.floor(len / 2);
console.log(index);
var left = arr.slice(0,index); //得到下标从0~index-1的数组
var right = arr.slice(index); //得到下标从index开始到末尾的数组
return merge(mergeSort(left) , mergeSort(right)); //里面采用递归