赞
踩
归并排序思路:11.6 归并排序 - Hello 算法
总体上来讲就是 递归分解 + 归并排序 代码如下↓
- //归并排序
- function merge(left, right){
- console.log(flag++);
- console.log(left);
- console.log(right);
- let result = new Array();
- let il = 0, ir = 0;
- //左右两个数组的元素依次进行比较 将较小的元素加入结果数组中
- while(il < left.length && ir < right.length){
- if(left[il] < right[ir]){
- result.push(left[il]);
- il++;
- }else{
- result.push(right[ir]);
- ir++;
- }
- }
- //左边数组、右边数组还有剩余时,将剩余元素加入结果数组
- while(il < left.length){
- result.push(left[il]);
- il++;
- }
- while(ir < right.length){
- result.push(right[ir]);
- ir++;
- }
- return result;
- }
- //递归分解
- function mergeSort(array){
- let length = array.length;
- //array长度为1 不需要排序 直接返回
- if(length <= 1){
- return array;
- }
- //找到中间索引值
- const mid = parseInt(length / 2);
- //截取左半部分和右半部分
- const left = array.slice(0,mid);
- const right = array.slice(mid);
- //递归分解后 选择排序合并
- return merge(mergeSort(left),mergeSort(right));
- }
输入:
var nums = [7,3,2,6,0,1,5,4];
输出:
const result = mergeSort(nums); console.log(result);输出结果:
[0, 1, 2, 3, 4, 5, 6, 7]
如何在vscode中使用运行js(输出结果出现乱码) ?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。