← 返回主页
⚡ 排序可视化 · 双栏 · 完整功能
元素数: 30
📊 比较: 0 🔄 交换: 0 🗑️ 移除: 0 ⏹ 就绪
✏️ 排序逻辑
修改后点击「播放」

📖 帮助文档 · JS基础语法(面向C++用户)

🎯 1. 核心变量

📌 例:a[0] 是第一个元素,a[n-1] 是最后一个元素

🔧 2. 核心函数(重点)

函数作用颜色⚠️ 注意
compare(i, j) 比较 a[i]a[j] 绿色 ❌ 不修改数组!
swap(i, j) 交换 a[i]a[j] 橙色 ✅ 修改数组
remove(i) 移除 a[i](标记删除) 红色 ✅ 修改数组

📐 3. C++ vs JavaScript 语法对比

C++JavaScript说明
int x = 5;let x = 5;变量声明
const int x = 5;const x = 5;常量(不可变)
vector<int> a;let a = [];数组声明
a.size()a.length数组长度
a.push_back(x)a.push(x)末尾添加元素
for (int i = 0; i < n; i++)for (let i = 0; i < n; i++)for 循环
if (a[i] > a[j])if (a[i] > a[j])if 条件(相同)
swap(a[i], a[j])swap(i, j)交换(我们的函数)
// 注释// 注释单行注释(相同)
/* 注释 *//* 注释 */多行注释(相同)

💻 4. 如何编写排序代码

📝 5. 示例:冒泡排序(C++ vs JS)

C++ 风格
for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (a[j] > a[j+1]) { swap(a[j], a[j+1]); } } }
✅ JavaScript(我们的工具)
for (let i = 0; i < n-1; i++) { for (let j = 0; j < n-i-1; j++) { compare(j, j+1); if (a[j] > a[j+1]) { swap(j, j+1); } } }

📌 区别:compare 显示比较动画,swap 显示交换动画

⚠️ 6. 常见错误(C++用户容易犯的)

🎲 7. 随机数生成指南(重要!)

⚠️ C++ 的 rand() 在 JavaScript 中不存在!

C++ vs JavaScript 随机数对比

C++JavaScript说明
rand() Math.random() 核心随机函数
rand() % 100 Math.floor(Math.random() * 100) 生成 0~99 的整数
rand() % 100 + 1 Math.floor(Math.random() * 100) + 1 生成 1~100 的整数
srand(time(0)) ✅ 不需要!自动随机 JS 自动初始化种子

📝 常用随机数公式

// 生成 0 到 max-1 的随机整数 let x = Math.floor(Math.random() * max); // 生成 min 到 max 的随机整数(包含两端) let x = Math.floor(Math.random() * (max - min + 1)) + min; // 生成 0 到 1 的随机小数 let x = Math.random(); // 随机打乱数组(Fisher-Yates洗牌) for (let i = a.length - 1; i > 0; i--) { let j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; // 交换 }

✅ 在灭霸排序中的应用

// 随机选择一半元素删除 let snapCount = Math.floor(aliveCount / 2); let aliveIndices = []; for (let i = 0; i < n; i++) if (active[i]) aliveIndices.push(i); // 随机打乱索引 for (let i = aliveIndices.length - 1; i > 0; i--) { let j = Math.floor(Math.random() * (i + 1)); [aliveIndices[i], aliveIndices[j]] = [aliveIndices[j], aliveIndices[i]]; } // 取前 snapCount 个删除 let toRemove = aliveIndices.slice(0, snapCount);

📌 核心区别:Math.random() 返回 0~1 的小数,需要配合 Math.floor() 取整

🎮 8. 控制按钮

📦 9. 算法模板说明

— 祝您排序愉快!有问题点击「帮助」查看 —