1. 程式人生 > >數據結構(5) 第五天 快速排序、歸並排序、堆排序、高級數據結構介紹:平衡二叉樹、紅黑樹、B/B+樹

數據結構(5) 第五天 快速排序、歸並排序、堆排序、高級數據結構介紹:平衡二叉樹、紅黑樹、B/B+樹

平衡二叉樹 let b+樹 堆排 mark 9.png 思想 incr 相等

01 上次課程回顧

希爾排序 又叫減少增量排序

increasement = increasement / 3 + 1

02 快速排序思想

思想: 分治法 + 挖坑填數

分治法: 大問題分解成各個小問題,對小問題求解,使得大問題得以解決

03 快速排序代碼實現

let arr = [23,123,34,5,123,5,5,3,2,3,1,46,234,123,123]
function quicksort(arr,start,end) { let i = start let j = end // 設置遞歸退出條件 if(start >= end) return
let benchmark = arr[start]
while(i != j) { while(i<j && arr[j] >= benchmark) { j--; } while(i<j && arr[i] <= benchmark) { i++; }
if(i<j) { let t = arr[i] arr[i] = arr[j] arr[j] = t } }
arr[start] = arr[i] arr[i] = benchmark
quicksort(arr,start,i-1) quicksort(arr,i+1,end) }
quicksort(arr,0,arr.length-1)
console.log(arr)

04 歸並排序

歸並排序基本思想: 將兩個有序序列合並成一個有序序列

技術分享圖片

將兩個合成一個有序序列

06 堆排序思路

完全二叉樹

知道完全二叉樹(complete binary tree)的先序序列就可以確定它的唯一結構:

技術分享圖片

堆:

大頂堆:

父節點比兩個子節點大

小頂堆:

父節點比兩個子節點都小

堆就是完全二叉樹 不過要滿足條件:

給了我們一個數組 就相當於給了我們一個完全二叉樹 他還不滿足堆的條件

通過調整堆,初始化堆

數組個數除以2正好是最後一個子樹

然後在這個子樹裏面進行交換 形成堆

技術分享圖片

08 web閑聊

socket套接字

補:高級數據結構:

二叉排序樹:

一棵樹 左邊比結點小 右邊比結點大

用來查找。

平衡二叉樹:

二叉排序樹可能退化成一種鏈表。

平衡二叉樹左右子樹差不能大於一(小於等於)

反轉:

紅黑樹

技術分享圖片

技術分享圖片

  1. 節點顏色: 紅,黑
  2. 根節點必須是黑色的
  3. 紅節點下邊不能掛紅結點
  4. 每一條路徑的黑結點個數相等
  5. NULL結點默認是黑色的

B樹,B+樹:

應用場景:

操作的不是內存裏的數據

操作的是硬盤裏的數據

高度有限

子節點很多(孩子最少幾千個,不是二叉樹)

應用:操作系統的文件系統 數據庫的數據文件

數據結構(5) 第五天 快速排序、歸並排序、堆排序、高級數據結構介紹:平衡二叉樹、紅黑樹、B/B+樹