數據結構(5) 第五天 快速排序、歸並排序、堆排序、高級數據結構介紹:平衡二叉樹、紅黑樹、B/B+樹
阿新 • • 發佈:2019-04-04
平衡二叉樹 let b+樹 堆排 mark 9.png 思想 incr 相等
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)
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
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 } }
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套接字
補:高級數據結構:
二叉排序樹:
一棵樹 左邊比結點小 右邊比結點大
用來查找。
平衡二叉樹:
二叉排序樹可能退化成一種鏈表。
平衡二叉樹左右子樹差不能大於一(小於等於)
反轉:
紅黑樹
- 節點顏色: 紅,黑
- 根節點必須是黑色的
- 紅節點下邊不能掛紅結點
- 每一條路徑的黑結點個數相等
- NULL結點默認是黑色的
B樹,B+樹:
應用場景:
操作的不是內存裏的數據
操作的是硬盤裏的數據
高度有限
子節點很多(孩子最少幾千個,不是二叉樹)
應用:操作系統的文件系統 數據庫的數據文件
數據結構(5) 第五天 快速排序、歸並排序、堆排序、高級數據結構介紹:平衡二叉樹、紅黑樹、B/B+樹