# æåº ## 常èæåº ### å¿«éæåº ```go func QuickSort(nums []int) []int { // æè·¯ï¼æä¸ä¸ªæ°ç»å为左å³ä¸¤æ®µï¼å·¦æ®µå°äºå³æ®µ quickSort(nums, 0, len(nums)-1) return nums } // åå°äº¤æ¢ï¼æä»¥ä¼ å ¥äº¤æ¢ç´¢å¼ func quickSort(nums []int, start, end int) { if start < end { // åæ²»æ³ï¼divide pivot := partition(nums, start, end) quickSort(nums, 0, pivot-1) quickSort(nums, pivot+1, end) } } // ååº func partition(nums []int, start, end int) int { // éåæåä¸ä¸ªå ç´ ä½ä¸ºåºåpivot p := nums[end] i := start // æåä¸ä¸ªå¼å°±æ¯åºåæä»¥ä¸ç¨æ¯è¾ for j := start; j < end; j++ { if nums[j] < p { swap(nums, i, j) i++ } } // æåºå弿¢å°ä¸é´ swap(nums, i, end) return i } // 交æ¢ä¸¤ä¸ªå ç´ func swap(nums []int, i, j int) { t := nums[i] nums[i] = nums[j] nums[j] = t } ``` ### å½å¹¶æåº ```go func MergeSort(nums []int) []int { return mergeSort(nums) } func mergeSort(nums []int) []int { if len(nums) <= 1 { return nums } // åæ²»æ³ï¼divide å为两段 mid := len(nums) / 2 left := mergeSort(nums[:mid]) right := mergeSort(nums[mid:]) // åå¹¶ä¸¤æ®µæ°æ® result := merge(left, right) return result } func merge(left, right []int) (result []int) { // 两边æ°ç»å并游æ l := 0 r := 0 // 注æä¸è½è¶ç for l < len(left) && r < len(right) { // è°å°åå¹¶è° if left[l] > right[r] { result = append(result, right[r]) r++ } else { result = append(result, left[l]) l++ } } // å©ä½é¨ååå¹¶ result = append(result, left[l:]...) result = append(result, right[r:]...) return } ``` ### å æåº ç¨æ°ç»è¡¨ç¤ºçå®ç¾äºåæ complete binary tree > å®ç¾äºåæ VS å ¶ä»äºåæ  [å¨ç»å±ç¤º](https://www.bilibili.com/video/av18980178/)  æ ¸å¿ä»£ç ```go package main func HeapSort(a []int) []int { // 1ãæ åºæ°ç»a // 2ãå°æ åºæ°ç»aæå»ºä¸ºä¸ä¸ªå¤§æ ¹å for i := len(a)/2 - 1; i >= 0; i-- { sink(a, i, len(a)) } // 3ã交æ¢a[0]åa[len(a)-1] // 4ãç¶åæåé¢è¿æ®µæ°ç»ç»§ç»ä¸æ²ä¿æå ç»æï¼å¦æ¤å¾ªç¯å³å¯ for i := len(a) - 1; i >= 1; i-- { // ä»åå¾åå¡«å å¼ swap(a, 0, i) // åé¢çé¿åº¦ä¹åä¸ sink(a, 0, i) } return a } func sink(a []int, i int, length int) { for { // å·¦èç¹ç´¢å¼(ä»0å¼å§ï¼æä»¥å·¦èç¹ä¸ºi*2+1) l := i*2 + 1 // å³èç¹ç´¢å¼ r := i*2 + 2 // idxä¿åæ ¹ãå·¦ãå³ä¸è ä¹é´è¾å¤§å¼çç´¢å¼ idx := i // åå¨å·¦èç¹ï¼å·¦èç¹å¼è¾å¤§ï¼ååå·¦èç¹ if l < length && a[l] > a[idx] { idx = l } // åå¨å³èç¹ï¼ä¸å¼è¾å¤§ï¼åå³èç¹ if r < length && a[r] > a[idx] { idx = r } // å¦ææ ¹èç¹è¾å¤§ï¼åä¸ç¨ä¸æ² if idx == i { break } // å¦ææ ¹èç¹è¾å°ï¼å交æ¢å¼ï¼å¹¶ç»§ç»ä¸æ² swap(a, i, idx) // ç»§ç»ä¸æ²idxèç¹ i = idx } } func swap(a []int, i, j int) { a[i], a[j] = a[j], a[i] } ``` ## åè [å大ç»å ¸æåº](https://www.cnblogs.com/onepixel/p/7674659.html) [äºåå ](https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/er-cha-dui-xiang-jie-shi-xian-you-xian-ji-dui-lie) ## ç»ä¹ - [ ] æåå¿«æãå½å¹¶ãå æåº