一个栈实现另一个栈排序|算法系列

603 阅读2分钟

一、题目描述💯

一个栈中元素为整形,现在想将这个栈从栈顶到栈底自大到小排序,允许申请一个栈。除此之外无其他数据结构。允许申请新变量,如何完成排序?

二、思路分析 🤔

  • 1.设置需要排序的栈为stack,辅助的栈为help,从stack弹出的当前值为curt
  • 2.将stack依次弹出,判断弹出的值curt与help的栈顶元素大小关系,如果curt较小,就将help的栈顶元素弹出并压入到stack中,反之,将curt压入到help中,继续循环,直到stack的长度0,且curt也成功压入到help,最后返回help为结果。

三、代码实现🦂

//需要排序的栈 stack
//辅助排序的栈 help
//一个人变量存储当前的值 curt
function anthorStackSort(stack){
let help = [];
let curt = stack.pop()
while(stack.length>0||curt){
   if(help.length == 0||curt>=help[help.length-1]){
       help.push(curt)
       curt= stack.pop();
   }else{
       stack.push(help.pop())
   }
}
return help
}

四、简单测试🤖

function arraySort(stack){
    stack.sort(function (x,y) {
        return x-y;
    });
    return stack
}
var {Logarithm} = require('./Logarithm')//对数器测试结果
Logarithm(5,arraySort,anthorStackSort,false)

五、神级辅助(对数器)(非常好用,建议收藏使用)💎

/*
 * @Descripttion: 🐉对数器简单实现
 * @Author: xinxin
 * @Date: 2020-02-22 09:56:32
 * @LastEditTime: 2020-02-22 11:42:02
 */
//对数器实现,为了验证算法过程的疏漏
//适用于改变输入值本身,不返回新的数组
function getResult(stack,funName){
    funName(stack)
    return stack
}
//num:生成测试用例的数目 compareOne:自己实现算法的函数名称 compareTwo:其他成功的实现算法函数名称
function Logarithm(num,compareOne,compareTwo){
    //实现随机数列
    let arr = []
    for(let i = 0;i<num;i++){
        let numItem = parseInt(i *Math.random()*10)
        arr.push(numItem)
    }
    let arr2 = getResult(arr,compareTwo);
    let arr1 = getResult(arr,compareOne)
    let falseArr = []
    let k = 0
    let j = 0
    for(let i = 0,j=0,k=0;i<arr1.length;i++){
        if(arr1[i]==arr2[i]){
            j++
            process.stdout.write('√')
        }else{
            k++
            process.stdout.write('❌',k)
            falseArr.push(arr1[i])
        }
    }
    console.log(`结束`)
    console.log('------------------------------------------------')
    console.log(`本次测试用例是`)
    console.log(`${arr}`)
    console.log(`测试1函数的实验结果是`)
    console.log(`${arr1}`)
    console.log(`测试2函数的实验结果是`)
    console.log(`${arr2}`)
    console.log(`本次测试共测试${num}组,发生错误${k}组。`)
    }
    module.exports = {Logarithm};

代码下载地址

感谢🙇‍

点赞支持👍