基礎演算法複雜之五 堆排序

2021-08-25 02:46:13 字數 1055 閱讀 6959

堆排序是不穩定排序,時間複雜度最好,最壞,平均都為o(logn)

堆排序的基本思想是:

先將無序序列按照公升序或者降序需求構造成乙個大頂堆或者小頂堆;

將堆頂元素與末尾元素交換,然後重使最大元素沉到陣列末端;

重新調整堆使其成為大頂堆,繼續交換堆頂元素和末尾元素,反覆執行交換+調整,知道整個序列有序;

其中,大頂堆的概念是每個節點的值比其左右子節點的值都大,小頂堆的基本概念是每個節點都比其左右子節點的值都小;

#include#include#include#includeusing namespace std;

//堆排序

void swap(vector&nums,int a, int b)

void adjustheap(vector&nums, int index, int len)

else

break;

} nums[index] = temp;//將當前值放到最終的位置;

}void heapsort(vector&nums)

}int main()

; heapsort(nums);

return 0;

}

上面是公升序排序,下面是降序排序,與上面相比,只改變了兩個比較符號;

#include#include#include#includeusing namespace std;

//堆排序

void swap(vector&nums,int a, int b)

void adjustheap(vector&nums, int index, int len)

else

break;

} nums[index] = temp;//將當前值放到最終的位置;

}void heapsort(vector&nums)

}int main()

; heapsort(nums);

return 0;

}

演算法導論之五堆排序

堆排序的時間複雜度是,與插入排序相似,堆也具有空間原址性,即任何時候都只需要常數個額外的元素空間儲存臨時資料。1.堆簡介 1 堆是乙個陣列,表示堆的陣列a包括兩個屬性 a.length表示陣列元素的個數,a.heap size表示有多少個堆元素儲存在該陣列中。給定一結點的下標i,可以得到其父結點 左...

整理排序演算法(五) 堆排序

堆排序 大頂堆 將記錄看成乙個順序儲存的二叉樹 先構建大頂堆,所有節點都比他的兒子大或者等於。第一步 從最後乙個非葉子節點開始比較,一直到根。構建大頂堆成功。第二步 根與最後的葉子節點交換位置 第三步 除去剛才的葉子節點,再次構建大頂堆,這個時候構建大頂堆只要從上往下層級遍歷就好。演算法效能 堆排序...

基礎排序演算法 堆 和堆排序

堆是一種靈巧,部分有序的資料結構,它適合用來實現優先佇列。優先佇列是元素的乙個集合,其中每個元素都包含乙個被稱作元素優先順序的可排序屬性,優先佇列支援下面的操作 找出乙個具有最高優先順序的元素 一般是最大或者最小 刪除乙個具有最高優先順序的元素 新增乙個元素到集合中去 定義 堆可以定義為一根二叉樹,...