1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| var arr = [70,60,12,40,30,8,10]; heapSort(arr)
function heapSort(arr){ buildHeap(arr); } function buildHeap(arr){ var res = []; var i = Math.floor((arr.length-1)/2); for(i; i > 0;){ // 循环执行到剩下最后一个 adjustHeap(arr, i); var temp = arr[0]; arr[0] = arr[arr.length-1]; arr[arr.length-1] = temp; res.push(arr.pop()); i = Math.floor((arr.length-1)/2); } res.push(arr.pop()) console.log(res); } function adjustHeap(arr, i){ for(i; i>0; i--){ // 每一个非叶子节点和左右子节点比较交换 if(arr[2*i-1] && arr[2*i]){ if (arr[2*i-1] > arr[i-1]){ if(arr[2*i-1] > arr[2*i]){ var temp = arr[i-1]; arr[i-1] = arr[2*i-1]; arr[2*i-1] = temp; }else{ var temp = arr[i-1]; arr[i-1] = arr[2*i]; arr[2*i] = temp; } }else if(arr[2*i] > arr[i-1]){ var temp = arr[i-1]; arr[i-1] = arr[2*i]; arr[2*i] = temp; } }else{ var temp = arr[i-1]; arr[i-1] = arr[2*i-1]; arr[2*i-1] = temp; } } }
|