树排序

入门

连接排序与数据结构,理解 BST 的有序性。

用你自己的数组跑一遍

AlgoAnim · 树排序
速度
待机
// 源代码
1struct Node { int value; Node *left, *right; };
2
3Node* insert(Node* root, int value) {
4    if (!root) return new Node{value, nullptr, nullptr};
5    if (value < root->value) root->left = insert(root->left, value);
6    else root->right = insert(root->right, value);
7    return root;
8}
9
10void inorder(Node* root, vector<int>& result) {
11    if (!root) return;
12    inorder(root->left, result);
13    result.push_back(root->value);
14    inorder(root->right, result);
15}
16
17void treeSort(int arr[], int n) {
18    Node* root = nullptr;
19    for (int i = 0; i < n; i++) root = insert(root, arr[i]);
20    vector<int> sorted;
21    inorder(root, sorted);
22    for (int i = 0; i < n; i++) arr[i] = sorted[i];
23}

复杂度分析

时间 O(n log n)
空间 O(n)
最优 O(n log n)
最坏 O(n²)

算法讲解

树排序将数组元素逐个插入二叉搜索树(BST)。

BST 的中序遍历会自然产生有序序列。

平均时间复杂度 O(n log n),但最坏情况(退化为链表)为 O(n²)。

如果使用平衡 BST(如 AVL),可以保证 O(n log n)。