Java实现遍历、排序、查找算法及简要说明 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序、中序、后序三种遍历顺序,三种顺序又分别有递归和常规算 法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序、 中序还是后序。下面只要求掌握递归遍历算法,常规遍历算法见附录一。 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树。代码如下: void ( bt) null)//如果当前树为空,则终止递归 ; .out.print(bt.());// 先访问根节点 (bt.());// 再遍历左子树 (bt.());// 再遍历右子树 1.3.中序遍历算法 遍历顺序:遍历左子树,访问根节点,遍历右子树。代码如下: void ( bt) null)//如果当前树为空java查找算法,则终止递归 ; (bt.());// 先遍历左子树 .out.print(bt.());// 再访问根节点 (bt.());// 再遍历右子树 1.4.后序遍历算法 遍历顺序:遍历左子树,遍历右子树,访问根节点。
代码如下: void ( bt) null)//如果当前树为空,则终止递归 ; (bt.());// 先遍历左子树 (bt.());// 再遍历右子树 .out.print(bt.());// 再访问根节点 Java实现遍历、排序、查找算法及简要说明 1.5. 层次遍历算法 void ( bt) null); Queue ();q.(bt); hile(!q.()) ()q.();// 取出队首元素,访问之 .out.(bt.()); q.(bt.());//如果左节点存在,放入队列中 q.(bt.());//如果右节点存在,放入队列中 排序算法(9种排序算法) 2.1. 概述 将一个数据元素的任意序列java查找算法,重新排列成一个按关键字有序的序列。
2.2. 插入类排序 基本思想是:逐个考察每个待排序元素,将每一个新元素插入到前面已经排好序的序列中适当的位置上, 使得新序列仍然是一个有序序列。主要介绍三种:直接插入排序、折半插入排序和希尔排序。 2.2.1. 直接插入排序 思路:仅有一个元素的序列总是有序的,因此,对 个元素,逐个向有序序列中执行插入操作java查找算法-Java实现遍历、排序、查找算法及简要说明,从而得到 个元素按关键字有序的序列。代码如下:void (int[] 实现遍历、排序、查找算法及简要说明 int 2.2.2.折半插入排序 思路:可以不断二分有序序列来确定插入位置,即搜索插入位置的方法可以使用折半查找实现。代码如下: void (int[] 和已排好序的最大值交换顺序int low hile(low a[mid])high tmp;//high 2.2.3.希尔排序 思路:首先将待排序的元素分为多个子序列,使得每个子序列的元素个数相对较少,对各个子序列分 别进行直接插入排序,待整个待排序序列“基本有序”后,再对所有元素进行一次直接插入排序。 void shell(int[] 实现遍历、排序、查找算法及简要说明 和已排好序的最大值交换顺序int 2.3.交换类排序 2.3.1. 基本思想 交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”之。
2.3.2. 冒泡排序 void (int[] 前后比较int tmp 2.3.3.快速排序 思路:划分步骤:通过枢轴元素 将序列一分为二,且左子序列的元素均小于 x,右子序列的元素均 大于 x;治理步骤:递归的对左、右子序列排序; void quick(int[] , int high) (a,low, high); quick(a, low, part quick(a,part (int[] , int high) hile(low hile(low a[high])//先从高端开始查找 high--; a[low] a[high];//交换数据 实现遍历、排序、查找算法及简要说明 hile(low a[low])//再从低端开始查找 low++; a[high] a[low];//交换数据 tar;//重新设置枢轴 low;// 返回枢轴位置 2.4.选择类排序 2.4.1. 概述 每一趟从 n-i+1 (i=1,2,…,n)个元素中选取一个关键字最小的元素作为有序序列中第 个元素。
2.4.2. 简单选择排序 void (int[] arr, int index) arr[index];arr[index] arr[i];arr[i] index++;(arr, index); (int[] arr) arr[j];arr[j] arr[i];arr[i] 2.4.3.树形选择排序和堆排序(附录二) 2.5. 并归排序排序 思想: 实现遍历、排序、查找算法及简要说明 组合:将两个有序的子序列合并为一个有序序列。void msort(int[] , int high) sort(a,low, (high sort(a,(high erge(a,low, (high (int[] p;//并归a中p到q,q+1到r两个数组int 2.6.各种排序之间的比较 实现遍历、排序、查找算法及简要说明 查找算法(3种查找算法) 3.1. 顺序查找 int order(int[] array, int tar) array[i]) -1; 3.2.折半查找 int (int[] array, int tar, int low, int high) 二分法查找递归int mid; high) -1; mid array[mid]) mid array[mid])(array, tar, mid++, high); else (array, tar, low, mid--); -1; (int[] array, int tar) 二分法查找非递归int low hile(low tar) mid tar)low -1; 3.3.二叉树查找 实现遍历、排序、查找算法及简要说明 ( bt, tar) null) ne witch(pare(tar, bt.())) case-1:// tar比data小就查找左子树 (bt.(), tar); case tar比data大就查找右子树 (bt.(), tar); :// 比较结果是0,tar和data相等就返回 bt; Tree( bt, tar) hile(bt witch(pare(tar, bt.())) case-1:// tar比data小就查找左子树 bt bt.();case tar比data大就查找右子树 bt bt.();:// 比较结果是0,tar和data相等就返回 bt; 附录一void ( 二叉树先序遍历非递归算法Stack .out.(p.());//访问根节点 右子树压栈s.push(p.()); p.();//继续访问左子树直到为空 ()s.pop();// 当当前左子树遍历完成,存右子树的栈退栈 实现遍历、排序、查找算法及简要说明 ( bt, Stack null) null; hile(bt.()) s.push(bt);bt ; ( bt) 二叉树中序遍历的非递归算法Stack (); .out.(p.());//访问根节点 ()s.pop(); null;//栈为空则查找完成 ( 二叉树后序遍历非递归算法Stack (); pre null;//缓存上次访问节点 查找最左节点s.push(p); ()s.peek(); list.(p);s.pop(); pre 实现遍历、排序、查找算法及简要说明 附录二堆排序: 已知r[low..high]中除 r[low]之外,其余元素均满足堆的定义 void (int[] , int high) temp比其孩子都大,则插入到 low 所指位置 break; r[low] (int[] 初始化建堆(r, 不断输出堆顶元素并调整r[1..i-1]为新堆 int tmp tmp;(r,