// 排序系列--堆排序.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 用於構建堆,從最後乙個非葉子結點索引開...