Java用栈实现排序_Java中的栈排序

这篇博客介绍了如何使用Java实现双栈排序算法,将栈中的元素按从大到小的顺序排列。通过两个栈stackSrc和stackDes,当源栈非空时,不断将源栈最小元素与目的栈元素比较并调整,最终达到排序目的。详细步骤和源代码一并给出。
摘要由CSDN通过智能技术生成

本篇博客是上一篇博客的延续。在实现图论算法的过程中,需要对栈中的元素进行排序。我使用的是双栈排序算法,实现的是将栈中的元素按从大到小的顺序排列,现将该算法的思路总结如下:

1、算法主要涉及到两个栈,stackSrc和stackDes。stackSrc是原始存储数据的栈,简称源栈;stackDes是用来存储排序之后元素的栈,简称目的栈。

2、首先判断源栈stackSrc是否为空,如果为空,则抛出异常NoSuchElementException。

3、如果源栈非空,则进入while循环,while循环执行的条件是源栈stackSrc非空,在while循环之中,将stackSrc的首元素出栈并赋给中间变量minInt,然后嵌套一个while循环,此while循环的作用是将目的栈stackDes中的首元素和minInt比较,如果minInt的值大于或等于目的栈首元素的值,则直接将minInt压入目的栈,跳出这一层while循环,继续执行最外层while循环。

4、如果minInt的值比目的栈首元素小,则目的栈栈首元素出栈,并将压入源栈,然后将minInt与目的栈的下一个首元素比较,直到不满足循环条件为止,跳出循环。第二个while循环执行的条件是目的栈不为空并且minInt的值比目的栈首元素小。在此,还需注明一点,当目的栈为空时,将minInt值直接压入目的栈。

5、按照上述思路,使用两层while循环可以确保源栈中每个元素均与目的栈中的每个元素作比较,最终排出正确的从大到小的元素顺序存储在目的栈中。

下面就是实现上述双栈排序算法的源代码:

class StackSort {

/**

* sort the stack in descending array return a reference of a stack

*/

public static Stack stacksort(Stack stackSrc) {

//creats an destination Stack object

Stack stackDes = new Stack();

//temp variable

int minTemp;

if (stackSrc.size() == 0) {

//throw exception

throw new NoSuchElementException("所要排序的栈为空栈!");

} else {

while (stackSrc.size() != 0) {

//record the top element of the stack

minTemp = stackSrc.pop();

//compare every element in stackDes with

//minTemp to find the min element

while ((stackDes.size() != 0) && (stackDes.peek() > minTemp)) {

//push the bigger element into stackSrc

stackSrc.push(stackDes.pop());

}

//push the smaller element into stackDes

stackDes.push(minTemp);

}

}

return stackDes;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值