排序(4) 堆排序

2021-10-01 03:06:03 字數 722 閱讀 5304

堆排序:

把堆頂元素不斷的和末尾元素互換,互換後使得末尾元素為n-1,再從堆頂元素往下濾,使之保持堆的性質即可。

#includeusing namespace std;

typedef struct heap *heap;

void percolatedown( heap h,int hole);

heap build(int n,int a)

void percolatedown( heap h,int hole)

h->data[i]=temp;

}void swap(int *a,int *b)

void heapsort(heap h,int n)

}int main();

heap h=build(sizeof(a)/sizeof(a[0]),a);

heapsort(h,sizeof(a)/sizeof(a[0]));

for(int i=1;i<=6;i++)

printf("%d ",h->data[i]);

}

此外附上堆頂元素的刪除思想:堆頂元素彈出後,必然會有新的空位,找乙個中間變數temp指向末尾元素,然後從上往下過濾,把末尾元素放入到正確的位置。

int delminheap(ptrheap h)

h->ele[i]=last_ele;

return min_ele;

}

排序 4 堆排序

將待排序的序列構成乙個大頂堆。此時,序列的最大值就是堆頂的根結點。將它移走 就是,將其與堆陣列的末尾元素交換,此時末尾的元素就是最大值 然後將剩餘的n 1個序列重新構成乙個堆,如此反覆。其中關鍵問題 1 如何將無序序列構成乙個堆 2 輸出堆頂元素後,如何調整公升序元素為乙個堆 4.堆排序 堆調整 v...

排序演算法4 堆排序

基本思想 大堆對應公升序序列,小堆對應降序佇列,我們從最後乙個非葉子結點建堆,步驟如下 將堆頂元素與當前最大堆的最後乙個節點交換 最大堆節點 1,即調整剩下的n 1個節點 從堆頂繼續向下調整,試之滿足最大堆,迴圈 和 直至剩下乙個節點。時間複雜度 nlogn 穩 定 性 不穩定 適用場景 topk等...

演算法4 堆排序

1.堆排序基本思想 利用堆 最大堆,最小堆 進行排序,特殊的樹形資料結構 完全二叉樹 將乙個無序序列構造成乙個堆。輸出堆頂元素後,調整剩餘元素稱為乙個新堆。2.複雜度 堆排序的主要執行時間耗費在初始構建堆和重建堆時的反覆篩選上。構建堆的時間複雜度為o n 重建堆的時間複雜度為o nlogn 堆排序對...