1. 程式人生 > >堆排序演算法虛擬碼

堆排序演算法虛擬碼

// 草稿,待完善 ///////////////////////////////////////////////////// void HeapSort( 陣列,元素個數) {     BuildHeap( 陣列,堆大小); // 大小就是包含的元素個數     for( 堆元素總個數減一 次迴圈 )     {         將“堆頂”元素同“堆底”元素交換;// 第一個和最後一個         RebuildHeap(陣列,堆大小減一); //每次都會篩選出一個最大(最小)的元素     } // 迴圈結束後,陣列就是有序的 } void BuildHeap( 陣列,堆大小) {     i = 1 ;     for( 堆大小減一 次迴圈 )     {         當前節點為陣列第 i++ 個元素 ;         while( 當前節點值 大於 其父節點值 )         {             當前節點的父節點作為新的當前節點(注意同時交換資料);             if( 當前節點是堆頂 ) break;         }     } } void RebuildHeap(陣列,堆大小) {     當前節點為堆頂; // 即第一個元素(下標是0)     while(1)     {         if( 當前節點無左子節點 ) break; // 已經到堆底         if( 當前節點無右子節點 )         {             if( 當前節點元素小於左子節點) 當前節點同左子節點交換;             break;  // 說明當前節點為次地層         }         確定當前節點、左子節點、右子節點中元素資料最大的一個;         if( 最大的不是當前節點 )         {             較大的節點同當前節點交換;             較大的節點作為新的當前節點;             continue;         }         break; // 當前節點最大,說明當前位置正合適。     } } /////////////////////////////////////////////////////////

相關推薦

排序演算法虛擬

// 草稿,待完善 ///////////////////////////////////////////////////// void HeapSort( 陣列,元素個數) {     BuildHeap( 陣列,堆大小); // 大小就是包含的元素個數   

演算法導論》第七章-快速排序虛擬

快速排序 虛擬碼:  QuickSort(A,p,r)        if p<r             q = Partition(A,p,r)    //確定劃分位置          

c++ 排序 源代

arr pri using pac getchar getc -- void 所有 #include "stdafx.h" #include <iostream> using namespace std; template<typename T> v

演算法導論 第六章:排序 筆記(、維護的性質、建排序演算法、優先順序佇列、排序的程式碼實現)

堆排序(heapsort) 像合併排序而不像插入順序,堆排序的執行時間為O(nlgn) 。像插入排序而不像合併排序,它是一種原地( in place) 排序演算法:在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。 堆: (二叉)堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。樹

排序演算法實現

堆的定義: 堆排序:基本思路,將待排序的一維陣列看成是一個完全二叉樹,將其生成一個堆,由定義可知,根元素必定是最小值(或最大值),將根輸出,然後將剩餘元素再調整成堆。 生成堆的方法:將序列看成一棵完全二叉樹,從最後一個非終端結點[n/2]開始,將該點與它的左右子樹根結點比較,將最小的

python資料處理--排序演算法

堆排序思路: 構建大頂堆(小頂堆) 交換堆的首尾元素,堆長度減一 交換首尾元素後,驗證堆的合規性,若不合規則調整資料位置,直至合規 重複2和3步驟,直至長度為0,結束 python實現_問題分析: 問題1:如何構建初始堆 問題2:序列長度與節點數量的關係(node

排序演算法詳解及實現-----------c語言

堆排序原理:   堆排序指的是將大堆(小堆)堆頂(即下標為0)元素與堆的最後一個(即下標為hp->size - 1)元素交換,hp->size–,將其餘的元素再次調整成大堆(小堆),再次將堆頂(即下標為0)元素與堆的最後一個(即下標為hp->s

精妙的排序演算法

堆排序是一種不穩定的選擇排序法,但在需要排的數的基數很大的時候效率相對較高 堆排序是一種以二叉樹結構為思維框架的排序演算法 想搞懂堆排序必須先明白什麼是二叉樹,二叉樹應該怎麼畫,二叉樹中每個點與陣列每個數下標的對應關係 還有什麼是 大/小頂堆,還有堆排序的排序思路 排序思路: 先

排序演算法(java版)

package com.duobang.headSort; import java.util.Arrays; import java.util.Random; public class MyHeapSort { public static void main(String[]

排序演算法

#include<stdio.h> void adjustHeap(int arr[],int i,int length) { int temp=arr[i]; for(int k=2*i+1;k<length;k=k*2+1) { if(k+1

排序演算法的圖文詳解

堆排序演算法的圖文詳解 建立初始化堆 堆排序 堆排序過程主要由三個步驟組成: 構建大頂堆/小頂堆 構建初始化堆 排序 貫穿整個堆排序過程的一個重要演算法就是對堆進行調整。下面我們按照上面三個步

必須知道的八大種排序演算法【java實現】(三) 歸併排序演算法排序演算法詳解

一、歸併排序演算法 基本思想:   歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。 歸併排序示例:   合併方法: 設r[i…n]由兩個有序子表r[i…m]和r[m+1…n]組

php實現排序演算法

最近在準備各種面試,複習了一波演算法基礎,關於什麼是堆排序我就不多說了,這裡說的很詳細,不明白的可以參考一下: https://jingyan.baidu.com/article/5225f26b057d5de6fa0908f3.html 廢話不多說,貼完整程式碼: &l

swustoj排序演算法(1015)

編寫程式堆排序演算法。按照非遞減排序,測試資料為整數。 Description 第一行是待排序資料元素的個數; 第二行是待排序的資料元素。 Input 一趟堆排序的結果。 Output

程式設計師必須掌握的十種演算法---排序演算法

堆排序,就是利用完全二叉樹的某些特性對陣列進行排序。 #include<stdio.h> int h[101];//用來存放堆的陣列 int n;//用來儲存堆中元素的個數,也就是堆的

【PHP-排序演算法】快速排序排序演算法時間複雜度比較

介紹 在以往工作或者面試的時候常會碰到一個問題,如何實現海量TopN,就是在一個非常大的結果集裡面快速找到最大的前10或前100個數,同時要保證記憶體和速度的效率,我們可能第一個想法就是利用排序,然後擷取前10或前100,而排序對於量不是特別大的時候沒有任何問題,但只要

排序演算法基於二叉樹資料結構的python實現

堆排序的原理略,此處只是作為記錄,提供整個程式碼的實現,其中每個細節會給出註釋和函式的設計思路(程式碼末尾)。 注:堆排序演算法的實現,以陣列結構來實現要簡潔高效!此處只是作為練手使用,由於堆排序的陣列實現已經有很多, 此處略。 自定義模組: 這個模組我們只用到其節點物件的建立、根據陣列生成

排序演算法排序演算法的實現

在做一份筆試題時,發現對堆排序演算法還不甚瞭解,所以趕緊了解了一下相關思想和概念,並嘗試自身實現了一下,在這附上概念思想以及程式碼的實現。 堆排序:利用堆資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為O(nlogn),它

(C#)A*演算法虛擬及原始碼

using UnityEngine; using System.Collections; public class Node { /*邏輯中用的*/ public int gCost; public int hCost; public int fCost {

基於陣列的排序演算法的C語言實現

實現如下: int getParent(int c); int getLeft(int p); int getRight(int p); void swap(int *p1, int *p2); void heap_sort(int *source, i