You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将Sedgewick提出的排列算法伪代码转换为JavaScript实现

请求将Sedgewick提出的排列算法伪代码转换为JavaScript实现

嘿,我来帮你把这套排列算法伪代码转成能用的JavaScript实现~先给你补点背景:Robert Sedgewick在1977年《Computing Surveys》的经典论文里提出了这套排列生成算法,也就是论文里的“Algorithm 1”,你给出的伪代码片段是这样的:

procedure permutations(N);     
    begin         
        c:= 1;         
        loop:             
            if N > 2 then permutations(N - 1)              
            endif;         
        while c < N:

不过这段伪代码没写完,我基于完整的算法逻辑给你转换成JavaScript实现,直接就能跑:

// 生成n个元素的排列,默认生成1到n的排列,也支持传入自定义数组
function permutations(n, customArr) {
  // 初始化数组:没传自定义数组的话,就用1到n的连续数字
  const arr = customArr || Array.from({ length: n }, (_, idx) => idx + 1);
  let c = 1;

  const executeLoop = () => {
    // 递归处理规模更小的子问题,对应伪代码里的分支逻辑
    if (n > 2) {
      permutations(n - 1, arr);
    }

    // 核心循环:通过交换元素生成新排列
    while (c < n) {
      // 注意JS数组是0索引,伪代码里的位置要减1来对应
      [arr[n - 1], arr[c - 1]] = [arr[c - 1], arr[n - 1]];
      // 这里可以替换成你需要的操作,比如把排列存到数组里而不是打印
      console.log(`生成的排列:${arr.join(' ')}`);
      c++;
    }

    // 重置计数器,保证递归回到上一层时能正常执行
    c = 1;
  };

  executeLoop();
}

// 调用示例:生成3个元素的排列
permutations(3);

给你简单唠唠这个实现的小细节:

  • 支持自定义数组,比如你想生成['a','b','c']的排列,直接传permutations(3, ['a','b','c'])就行
  • 递归部分完全对应伪代码里“N>2时递归处理N-1”的逻辑,不断缩小问题规模
  • while循环里的元素交换是生成不同排列的核心,每一次交换都会得到一个新的排列
  • 每次循环结束后重置计数器c,这样递归回到上一层的时候能正常继续执行

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:28:04