mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-26 12:53:43 +00:00
Update 算法 - 排序.md
补充快速选择中 a[j] 是第 j 小的元素(从 0 开始计数);切分过程的说明与代码保持一致;按 Java 8 文档更新 Arrays.sort() 使用的算法。
This commit is contained in:
+3
-3
@@ -273,7 +273,7 @@ public class QuickSort<T extends Comparable<T>> extends Sort<T> {
|
||||
|
||||
### 2. 切分
|
||||
|
||||
取 a[l] 作为切分元素,然后从数组的左端向右扫描直到找到第一个大于等于它的元素,再从数组的右端向左扫描找到第一个小于它的元素,交换这两个元素。不断进行这个过程,就可以保证左指针 i 的左侧元素都不大于切分元素,右指针 j 的右侧元素都不小于切分元素。当两个指针相遇时,将切分元素 a[l] 和 a[j] 交换位置。
|
||||
取 a[l] 作为切分元素,然后从数组的左端向右扫描直到找到第一个大于等于它的元素,再从数组的右端向左扫描找到第一个小于等于它的元素,交换这两个元素。不断进行这个过程,就可以保证左指针 i 的左侧元素都不大于切分元素,右指针 j 的右侧元素都不小于切分元素。当两个指针相遇时,将切分元素 a[l] 和 a[j] 交换位置。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/c4859290-e27d-4f12-becf-e2a5c1f3a275.gif" width="320px"> </div><br>
|
||||
|
||||
@@ -345,7 +345,7 @@ public class ThreeWayQuickSort<T extends Comparable<T>> extends QuickSort<T> {
|
||||
|
||||
### 5. 基于切分的快速选择算法
|
||||
|
||||
快速排序的 partition() 方法,会返回一个整数 j 使得 a[l..j-1] 小于等于 a[j],且 a[j+1..h] 大于等于 a[j],此时 a[j] 就是数组的第 j 大元素。
|
||||
快速排序的 partition() 方法,会返回一个整数 j 使得 a[l..j-1] 小于等于 a[j],且 a[j+1..h] 大于等于 a[j],此时 a[j] 就是数组中第 j 小的元素(j 从 0 开始计数)。
|
||||
|
||||
可以利用这个特性找出数组的第 k 个元素。
|
||||
|
||||
@@ -551,4 +551,4 @@ public class HeapSort<T extends Comparable<T>> extends Sort<T> {
|
||||
|
||||
### 2. Java 的排序算法实现
|
||||
|
||||
Java 主要排序方法为 java.util.Arrays.sort(),对于原始数据类型使用三向切分的快速排序,对于引用类型使用归并排序。
|
||||
Java 主要排序方法为 java.util.Arrays.sort(),对于原始数据类型使用双轴快速排序(Dual-Pivot Quicksort),对于引用类型使用 TimSort,它是归并排序的改进版本。
|
||||
|
||||
Reference in New Issue
Block a user