堆排序
class Solution { public: //第二个参数表示剩余未排序数字的数量即堆的大小 void makeHeap(vector&arr,int heapSize ,int index) { int left = 2 * index + 1;//左节点 int right = 2 * index + 2;//右节点 int maxIndex = index; if (left arr[maxIndex]) { maxIndex = left; } if (right arr[maxIndex]) { maxIndex = right; } if(maxIndex!=index) { swap(arr[index], arr[maxIndex]); makeHeap(arr, heapSize,maxIndex); } } void heapSort(vector &arr) { int n = arr.size(); //初始化堆 从最后一个非叶子节点开始建堆,最后一个非叶子节点就是n/2-1 for (int i = n / 2 - 1; i >= 0;i--) { makeHeap(arr, n,i); } for (int i = n - 1; i > 0;i--) { //将最大值交换到数组最后 swap(arr[i], arr[0]); //调整剩余数组,使其满足大顶堆 makeHeap(arr, i,0); } } };
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)