原创 遍歷二叉樹的遞歸與非遞歸算法

利用遞歸實現二叉樹的先序,中序,後序遍歷操作 /* 先序、中序、後序遞歸遍歷二叉樹算法 */ void PreOrder(BiTree T) //先序遍歷 { if(T != NULL) {

原创 Bogo排序

在計算機科學中,Bogo排序(bogo-sort)是個既不實用又原始的排序算法,其原理等同將一堆卡片拋起,落在桌上後檢查卡片是否已整齊排列好,若非就再拋一次。其名字源自Quantum bogodynamics,又稱bozo sort、b

原创 折半查找算法

在計算機科學中,折半搜索,也稱二分查找算法、二分搜索,是一種在有序數組中查找某一特定元素的搜索算法。搜素過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中

原创 堆排序

堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。 堆節點的訪問 通常堆是通過一維數組來實現的。在起始數組爲

原创 選擇排序

選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直

原创 圖的鄰接矩陣存儲

/* algo7-1.c 調用算法7.7、7.8 */ #include"c1.h" #define MAX_NAME 2 /* 頂點字符串的最大長度+1 */ typedef char ElemType[MAX_NAME];

原创 二叉樹的二叉線索存儲

/* c6-3.h 二叉樹的二叉線索存儲表示 */ typedef enum{Link,Thread}PointerTag; /* Link(0):指針,Thread(1):線索 */ typedef struct BiThrNo

原创 二叉樹的二叉鏈表存儲

/* c6-2.h 二叉樹的二叉鏈表存儲表示 */ typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; /* 左右孩子指針

原创 樹的二叉鏈表(孩子-兄弟)存儲

/* c6-5.h 樹的二叉鏈表(孩子-兄弟)存儲表示 */ typedef struct CSNode { TElemType data; struct CSNode *firstchild,*nextsibling

原创 Stooge 排序

Stooge排序是一種低效的遞歸排序算法,甚至慢於冒泡排序。在《算法導論》第二版第7章(快速排序)的思考題中被提到,是由Howard、Fine等教授提出的所謂“漂亮的”排序算法。 實現 如果最後一個值小於第一個值,則交換它們 如果當前子

原创 希爾排序

希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序算法。 希爾排序是基於插入排序的以下兩點性質而提出改進方法的: 插入排序在對幾乎已經排好序的數據操作時, 效率高, 即可以達到線性排序的效率 但插入排

原创 梳排序

梳排序(Comb sort)是一種由Wlodzimierz Dobosiewicz於1980年所發明的不穩定排序算法,並由Stephen Lacey和Richard Box於1991年四月號的Byte雜誌中推廣。梳排序是改良自泡沫排序和

原创 圖的鄰接表存儲

/* c7-2.h 圖的鄰接表存儲表示 */ #define MAX_VERTEX_NUM 20 typedef enum{DG,DN,AG,AN}GraphKind; /* {有向圖,有向網,無向圖,無向網} */ typed

原创 樹的雙親表存儲

/* c6-4.h 樹的雙親表存儲表示 */ #define MAX_TREE_SIZE 100 typedef struct { TElemType data; int parent; /* 雙親位置域 */ }

原创 快排序

快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因爲它的內部循