快速排序的非递归实现
来源:互联网 发布:mac上的大型网游 编辑:程序博客网 时间:2024/06/06 03:41
(1)思路
继续使用adjust进行划分,如果其中的元素不止1个,那么将下标的开始和结束入栈,否则不入栈
(2)代码
private void quickSortNR(int[] a, int begin, int end) {if(begin<end){Stack<Integer> stack = new Stack<Integer>();int mid = adjustNR(a,begin,end);if(begin<mid-1) //左边区间不止1个元素{stack.push(begin); //下标起点入栈stack.push(mid-1); //下标终点入栈}if(end>mid+1) //右边区间不止一个元素{stack.push(mid+1);stack.push(end);}while(!stack.isEmpty()){int tail = stack.pop(); //因为终点是后保存的,所以终点先出栈int head = stack.pop();int midx = adjustNR(a, head, tail);if(head<midx-1){stack.push(head);stack.push(midx-1);}if(tail>midx+1){stack.push(midx+1);stack.push(tail);}}}}private int adjustNR(int[] a, int begin, int end) {int flag = a[begin];while(begin<end){while(begin<end && a[end]>=flag)end--;if(begin<end)a[begin] = a[end];while(begin<end && a[begin]<=flag)begin++;if(begin<end)a[end] = a[begin];}a[begin] = flag;return begin;}
(3)测试
int[] a = {16, 105, 3, 31, 61, 50, 61, 80, 78, 4};quickSortNR(a,0,a.length-1);for(int x:a)System.out.print(x+" ");结果为:
3 4 16 31 50 61 61 78 80 105
0 0
- 快速排序的非递归实现
- php的非递归快速排序实现
- 非递归的快速排序实现(转)
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现代码
- 快速排序的非递归实现
- 快速排序算法的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- nopad++快捷键
- java中的PrivateKey
- 毕业设计项目
- Thread线程同步问题详解
- 单例模式
- 快速排序的非递归实现
- linux打补丁patch应用
- Spring MVC 教程,快速入门,深入分析
- Linux 用户间发命令
- Extjs4---json数据包含回车换行处理
- Android RelativeLayout 属性作用
- NULL和nullptr
- rman删除归档日志
- hoj 2934 Simple Math Question