归并排序
Posted 等风来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。
基本过程
1.将数组递归分解为有序数组(当分解到数组元素个数为1时候,数组自然有序)
2.将两个有序数组合并为一个大的有序数组
3.递归合并完成,即排序完成
function fMergeSort(arr,first,last,aTemp){ if(first > last){ throw new Error(‘first should less than last‘); } //取中对数组进行二分 var mid = (first + last)/2; fMergeSort(arr,first,mid,aTemp); fMergeSort(arr,mid+1,last,aTemp); fMergeArray(arr,first,mid,last,aTemp); } function fMergeArray(arr,first,mid,last,aTemp){ var k = 0, left = first,leftEnd = mid, right = mid+1,rightEnd = last; //将左右数组中较小者优先复制到临时数组 while(left <= leftEnd && right <= rightEnd){ if(arr[left] <= a[right]){ aTemp[k++] = arr[left++]; } else{ aTemp[k++] = arr[right++]; } } //将left或right剩余元素复制到临时数组,left或right只会有一个剩余 while(left <= leftEnd){ aTemp[k++] = arr[left++]; } while(right <= rightEnd){ aTemp[k++] = arr[right++]; } //将临时数组元素复制到元素数组中 for(var i=0;i<k;i++){ arr[first+i] = aTemp[i]; } }
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章