排序系列 堆排序

2021-06-14 15:10:09 字數 1075 閱讀 5476

// 排序系列--堆排序.cpp : 定義控制台應用程式的入口點。

//說明:堆排序其實是對簡單選擇排序的一種改進演算法,因為簡單的選擇排序在每次比較時沒有儲存上一趟比較的結果

//導致對前一趟做過的比較有重複了一次,這樣就會大大降低效率,而堆排序就可以儲存每次的比較結果

//在vs2010上編譯通過

//堆排序思想:堆是具有以下性質的完全二叉樹(資料結構--樹)

//1,小根堆:每個節點的值小於等於左右孩子節點的值

//2,大根堆:每個節點的值大於等於左右孩子節點的值

//對於堆排序,首先要構造堆,然後將堆處理成小根堆或者大根堆,最後才是排序

#include "stdafx.h"

#include //用於呼叫隨機種子函式

#include

#include

#include

using namespace std;

void heapadjust(int a,int i,int size)  //調整堆,a是欲排序的陣列,i是要進行處理的非葉子節點的元素,size是陣列元素長度

if(rchild<=size&&a[rchild]>a[max])//判斷右孩子是否比父節點大,如果滿足,就交換記錄,否則執行下一步

if(max!=i)//判斷上面兩個判斷是否執行,如果執行了,必定max和i不等,否則max就等於i,這樣就不必調整了

}       

}

void buildheap(int a,int size)    //建立堆

}

void heapsort(int a,int size)    //堆排序

} int _tmain(int argc, _tchar* argv)

heapsort(a,20);

for (int i=0;i<20;i++)

排序系列 堆排序

1 堆排序定義 n個關鍵字序列kl,k2,kn稱為堆,當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k2i且ki k2i 1 或 2 ki k2i且ki k2i 1 1 i 若將此序列所儲存的向量r 1.n 看做是一棵完全二叉樹的儲存結構,則堆實質上是滿足如下性質的完全二叉樹 樹中任一非葉結點...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...