【Java】快速排序的非递归实现
2021-06-27 08:03
标签:arrays event http html 快速 strong util java text 快速排序一般采用递归方法(详见快速排序及其优化),但递归方法一般都可以用循环代替。本文实现了java版的非递归快速排序。 更多:数据结构与算法合集 采用非递归的方法,首先要想到栈的使用,通过阅读递归调用部分的代码,思考如何用栈来代替。递归调用的核心代码是 pivot = partition(a, low, high); 每次循环都必须包含这句核心代码,可以想到,如果要对该行代码实现循环,只能对low和high采取操作,所以我们在栈中压入low和high,每个循环弹出一对low和high,用于核心代码的实现,当栈空后就说明没有需要排序的部分了,结束循环。 递归部分代码: 修改成的非递归代码: 注意点:栈弹出的顺序与压入的顺序相反,要小心栈的压入与弹出操作。 (含测试代码) 递归改为非递归,联想到栈的使用,根据对核心代码的循环,确定栈中存储什么数据。 更多:数据结构与算法合集 【Java】快速排序的非递归实现 标签:arrays event http html 快速 strong util java text 原文地址:https://www.cnblogs.com/yongh/p/9652704.html思路分析
下面是递归代码和根据递归代码修改成的非递归代码。 /**
* 递归调用
*/
public void qSort(int[] a, int low, int high) {
int pivot;
if (low >= high)
return;
//原始递归操作
// pivot = partition(a, low, high); // 将数列一分为二
// qSort(a, low, pivot - 1); // 对低子表排序
// qSort(a, pivot + 1, high); // 对高子表排序
// 优化递归操作
while (low
/**
* 非递归
*/
public void qSort2(int[] a, int low, int high) {
int pivot;
if (low >= high)
return;
Stack
完整Java代码
import java.util.Arrays;
import java.util.Stack;
/**
*
* @Description 快速排序的递归与非递归实现
*
* @author yongh
* @date 2018年9月14日 下午2:39:00
*/
public class QuickSort {
public void quickSort(int[] a) {
if (a == null)
return;
qSort(a, 0, a.length - 1);
}
/**
* 递归
*/
public void qSort(int[] a, int low, int high) {
int pivot;
if (low >= high)
return;
//原始递归操作
// pivot = partition(a, low, high); // 将数列一分为二
// qSort(a, low, pivot - 1); // 对低子表排序
// qSort(a, pivot + 1, high); // 对高子表排序
// 优化递归操作
while (low = high)
return;
Stack
null
[]
[1]
[3, 3, 3, 3, 3]
[-3, 1, 2, 3, 3, 5, 6, 6, 7]
收获
上一篇:C#语法快速热身
下一篇:SpringAOP面向切面编程