終於弄懂堆排序
阿新 • • 發佈:2018-12-10
var arr = [3,5,1,6,4,7,2]; function swap(array,x,y) { var temp = array[x]; array[x] = array[y]; array[y] = temp; } function buildHeap(array,heapSize) {//構建大頂堆 var i = Math.floor(heapSize / 2); for(;i >=0;i--) { heapify(array,heapSize,i); } } function heapify(array,heapSize,i) {//調整大頂堆 var left = 2 * i + 1, right = 2 * i + 2, largest = i; if(left < heapSize && array[left] > array[largest]){ largest = left; } if(right < heapSize && array[right] > array[largest]) { largest = right; } if(largest != i) { swap(array,largest,i); heapify(array,heapSize,largest);//繼續交換當前剩餘的節點 } } function heapSort(array) { var heapSize = array.length; //第一步構建一個大頂堆 buildHeap(array,heapSize);//構建一個大頂堆 while(heapSize > 1) { heapSize--; swap(array,0,heapSize);//始終交換陣列第一個跟最後一個元素 heapify(array,heapSize,0);//調整為大頂對,使陣列的第一個元素保持是最大的。 } } heapSort(arr);