原创 紅黑二叉查找樹(red-black BSTs)

前言: 前面我們已經詳細的學習了2-3查找樹,2-3樹的深度很小,平衡性好,效率高,但是其有兩種不同的結點,實際代碼實現比較複雜。而今天我們將要學習的紅黑樹用紅鏈接表示2-3樹中另類的3-結點,統一了樹中的結點類型,使代碼實現簡單化,又不

原创 B樹(B-trees)

前言: 在我們學習了平衡二叉查找樹、2-3樹、紅黑樹等等之後,我們今天來學習新的一種樹——B樹,它的效率較平衡二叉查找樹還要高,下面就來詳細看看這種數據機構。 B樹: M階B樹性質: 1. 根節點至少有兩個子節點。 2. 其他節點至少有M

原创 k-d樹(Kd trees)

前言: 在學習了平衡二叉查找樹、紅黑樹等等之後,今天我們再來學習一個新的數據結構——kd樹,kd樹是一種分割k維數據空間的數據結構,主要應用於多維空間關鍵數據的搜索,下面就讓我們來詳細看看這種算法。 kd樹: kd樹也是二叉樹,是用於分割

原创 2-3查找樹(2-3 search trees)

前言: 前面我們學習了基本的二叉樹,現在我們來學習另一種效率更高的樹——平衡查找樹,這種樹有幾種: AVL 2-3 Search Trees Red-black BSTs ——紅黑二叉查找樹 今天我們先從最簡單的學習:2-3 查找樹 2-

原创 快速排序(quick sort)

前言: 今天我們再來學習一種排序,快速排序,爲什麼叫它快速排序呢?因爲它效率高,是所有排序算法中效率最高的。下面來詳細介紹一下快速排序算法。 快速排序: 這種排序集排序與分治法於一體,首先是找數列中的一個數作爲基準數,然後將所有比它小的數

原创 插入排序(insertion sort)

前言: 前面已經學習了選擇排序,今天來學習插入排序,學習真快樂。下面就來看看插入排序算法和其c++代碼: 插入排序: 這裏以從小到大排序爲例,對於一列數,取一個指針從數列的頭部開始往後指,指針指到的數與前面的數不斷進行比較,如果小就交換,

原创 堆排序(heap sort)

前言: 前面我們已經學習了二叉堆的基本知識,今天我們來學習一種堆排序算法。 堆排序: 堆排序中需要用到許多前面二叉堆的操作,如果不知道可以看看我的前一個博客。https://blog.csdn.net/qq_39747794/articl

原创 符號表(simbol table)

前言: 今天學習了一種新的抽象數據結構的API——符號表,它其實與一些編程語言中的字典dictionary很像,也是每一個元素都有key和value,可以根據key來尋找value。下面就來看看這種數據結構的詳細內容和基本操作。 符號表:

原创 二叉堆(binary heap)

前言: 在前面學習了許多種排序之後,相信大家都已經學膩了排序,心裏都會發牢騷說算法難道就只有排序嗎,今天我們就不學習算法了,我們開始學習新的數據結構——二叉堆。 二叉堆: 二叉堆就是二叉樹,完全的二叉樹中每一個父節點下有兩個子節點。今天

原创 自底向上的歸併排序(bottom-up merge sort)

前言: 前面已經介紹了歸併排序,那是普通的自頂向下的歸併排序,下面就讓我們來學習自底向上的歸併排序。 自底向上的歸併排序 1. 首先將數列劃分成微小的數列,每個數列也就一到兩個元素。 2. 不斷合併,2,4,8.。。。 基本排序軌跡圖:

原创 歸併排序(mergesort)

前言: 比較有名氣的排序算法有八種,前面我們已經學習了幾種排序,下面我們來學習新的一種排序——歸併排序。 歸併排序 歸併排序的核心思想是分治遞歸,其主要步驟是 1. 將數列複製,再將複製的數列分爲兩個數列,左一半和右一半。 2. 分別對左

原创 凸包算法(convex hull)

前言: 今天學習了幾何算法——凸包算法,聽着名字很奇怪,不知道它是幹什麼的,但其實也很簡單。下面來介紹一下這種凸包算法和其c++代碼: 凸包算法: 其實很簡單,就是用一個的凸多邊形圍住所有的點。就好像桌面上有許多圖釘,用一根緊繃的橡皮筋將

原创 希爾排序(shell sort)

前言: 今天又學習了一種排序算法,他可以說是插入排序的升級版,由於它是由希爾發現的,便將其命名爲希爾排序。下面就來看看希爾排序算法和其c++代碼: 希爾排序: 希爾排序中是先將數列分成小的子列(每隔相同間隔h的數爲一個子列),之後對子列中

原创 選擇排序(selection sort)

前言: 今天學習了選擇排序,它與冒泡排序很像,都是一個指針在數列中不斷的移動。但不同點是冒泡排序的指針從數列的尾開始指,指針前面的數不斷兩兩比較,根據大小互相換位,當指針指到數列的頭部時,便排序完成。而選擇排序的指針是從數列的頭指到尾,不

原创 Quick-Find算法

前言:    今天開始學習算法,首先學習最基礎的入門級算法——Quick-Find, 它主要是一個用來找連通關係的一個算法。比如說這裏有五個人,A認識B, B認識C, C認識D, D認識E, 這樣的話A就認識了E。A,B,C,D,E組成了