插入、冒泡、选择、归并、创建树、树的遍历的代码
来源:互联网 发布:中国当前网络消费现状 编辑:程序博客网 时间:2024/06/05 11:19
package com.phj.sort;import java.lang.reflect.Array;public class SortIt {/** * 交换 * @param array * @param i * @param j */public void swapInt(int[] array, int i ,int j){int temp = array[i];array[i] = array[j];array[j] = temp ;}/** * 打印 * @param array */public void printArray(int[] array){for (int i : array){System.out.print(i+" ");} System.out.println();}/** * 冒泡升序 * @param array */public void bubbleASC (int[] array){for (int i = 0; i < array.length-1; i++){for (int j = 0; j < array.length-i-1; j++) {if(array[j] > array[j+1]){swapInt(array, j, j+1);}}}}/** * 选择升序 * @param array */public void choiceASC(int[] array){int temp = 0;for (int i = 0; i < array.length-1; i++) {temp = i;for (int j = i + 1; j < array.length; j++){if(array[temp] > array[j]){temp = j;}}if(i != temp){swapInt(array, i, temp);}}}/** * 快排的分割函数 * @param array * @param low * @param high * @return */private int partition(int[] array,int low, int high){int index = array[low];while(low < high){while(high > low){if(array[high] < index){swapInt(array, low, high);break;}else{high = high - 1;}}while(low < high){if(array[low] > index){swapInt(array, high, low);break;}else{low = low + 1;}}}return low;}/** * 快排 * @param array * @param low * @param high */public void quickChoose(int[] array,int low ,int high){if(low < high){int m = partition(array,low,high);quickChoose(array, low, m-1);quickChoose(array, m+1, high);}}/** * 归并排序 合并2个有序数组 * @param array * @param temp * @param start * @param mid * @param end */public void merge(int[] array, int start,int mid , int end){int i = start ;int j = mid + 1;int k = start;int m = mid - start + 1;int n = end - mid;int[] left = new int[m];int[] right = new int[n];for (i = 0, k = start; i < m; i++, k++) {left[i] = array[k];}for (j = 0, k = mid + 1; j < n; j++, k++) {right[j] = array[k];}for (i = 0, j = 0, k = start; i < m && j < n; k++) {if(left[i] < right[j]){array[k] = left[i];i = i + 1;}else{array[k] = right[j];j = j + 1;}}if(i < m){for (; i < m; i++, k++) {array[k] = left[i];}}if(j < n){for (; j < n; j++, k++) {array[k] = right[j];}}left = null;right = null;}/** * 利用递归进行 归并排序 * @param array * @param s * @param t */public void mergeSort(int[] array, int s , int t){if(s < t){int m = (s + t)/2;mergeSort(array, s, m);mergeSort(array, m+1, t);merge(array, s, m, t);}}/** * 用于调用的归并函数 * @param array */public void mSort(int[] array){mergeSort(array,0, array.length-1);}public void main(String[] args) {int[] abc = {123,32,90,54,71,12,200};mSort(abc);for (int i : abc) {System.out.print(i+" ");}System.out.println();}/** * 插入排序 * @param a * @param n */public void insertSort(int a[],int n){int k,t;for (int j=0; j<n; j++){/*这个实际上就是直接插入排序*/t = a[j];for (k=j-1; k>=0 && t<a[k]; k--){a[k + 1] = a[k];}a[k + 1] = t;}} /** * 二分查找 * * 注意:二分查找只是针对有序排列的各种数组或集合 * * @param target * @param array * @return */ public boolean binarySearch(int target, int[] array) { int front = 0; int tail = array.length - 1; // 判断子数组是否能再次二分 while (front <= tail) { // 获取子数组的中间位置,并依据此中间位置进行二分 int middle = (front + tail) / 2; if (array[middle] == target) { return true; } else if (array[middle] > target) { tail = middle - 1; } else { front = middle + 1; } } return false; }//end}
package com.phj.sort;import java.io.File;import java.io.FileNotFoundException;import java.util.Queue;import java.util.Scanner;import java.util.Stack;import java.util.concurrent.LinkedBlockingQueue;/** * 创建二叉树 * @author LENOVO * * @param <T> */public class Tree<T> { private Node<T> root; public Tree() { } public Tree(Node<T> root) { this.root = root; } //创建二叉树 public void buildTree() { Scanner scn = null; try { scn = new Scanner(new File("inputtxt")); } catch (FileNotFoundException e) { e.printStackTrace(); } root = createTree(root,scn); } //先序遍历创建二叉树 private Node<T> createTree(Node<T> node,Scanner scn) { String temp = scn.next(); if (temp.trim().equals("#")) { return null; } else { node = new Node<T>((T)temp); node.setLeft(createTree(node.getLeft(), scn)); node.setRight(createTree(node.getRight(), scn)); return node; } } //中序遍历(递归) public void inOrderTraverse() { inOrderTraverse(root); } public void inOrderTraverse(Node<T> node) { if (node != null) { inOrderTraverse(node.getLeft()); System.out.println(node.getValue()); inOrderTraverse(node.getRight()); } } //中序遍历(非递归) public void nrInOrderTraverse() { Stack<Node<T>> stack = new Stack<Node<T>>(); Node<T> node = root; while (node != null || !stack.isEmpty()) { while (node != null) { stack.push(node); node = node.getLeft(); } node = stack.pop(); System.out.println(node.getValue()); node = node.getRight(); } } //先序遍历(递归) public void preOrderTraverse() { preOrderTraverse(root); } public void preOrderTraverse(Node<T> node) { if (node != null) { System.out.println(node.getValue()); preOrderTraverse(node.getLeft()); preOrderTraverse(node.getRight()); } } //先序遍历(非递归) public void nrPreOrderTraverse() { Stack<Node<T>> stack = new Stack<Node<T>>(); Node<T> node = root; while (node != null || !stack.isEmpty()) { while (node != null) { System.out.println(node.getValue()); stack.push(node); node = node.getLeft(); } node = stack.pop(); node = node.getRight(); } } //后序遍历(递归) public void postOrderTraverse() { postOrderTraverse(root); } public void postOrderTraverse(Node<T> node) { if (node != null) { postOrderTraverse(node.getLeft()); postOrderTraverse(node.getRight()); System.out.println(node.getValue()); } } //后续遍历(非递归) public void nrPostOrderTraverse() { Stack<Node<T>> stack = new Stack<Node<T>>(); Node<T> node = root; Node<T> preNode = null;//表示最近一次访问的节点 while (node != null || !stack.isEmpty()) { while (node != null) { stack.push(node); node = node.getLeft(); } node = stack.peek(); if (node.getRight() == null || node.getRight() == preNode) { System.out.println(node.getValue()); node = stack.pop(); preNode = node; node = null; } else { node = node.getRight(); } } } //按层次遍历 public void levelTraverse() { levelTraverse(root); } public void levelTraverse(Node<T> node) { Queue<Node<T>> queue = new LinkedBlockingQueue<Node<T>>(); queue.add(node); while (!queue.isEmpty()) { Node<T> temp = queue.poll(); if (temp != null) { System.out.println(temp.getValue()); queue.add(temp.getLeft()); queue.add(temp.getRight()); } } } } //树的节点 class Node<T> { private Node<T> left; private Node<T> right; private T value; public Node() { } public Node(Node<T> left,Node<T> right,T value) { this.left = left; this.right = right; this.value = value; } public Node(T value) { this(null,null,value); } public Node<T> getLeft() { return left; } public void setLeft(Node<T> left) { this.left = left; } public Node<T> getRight() { return right; } public void setRight(Node<T> right) { this.right = right; } public T getValue() { return value; } public void setValue(T value) { this.value = value; } }
- 插入、冒泡、选择、归并、创建树、树的遍历的代码
- 冒泡、选择、插入、归并、快速排序代码
- 冒泡、鸡尾酒、选择、插入、归并、快速排序的C++程序
- 冒泡,插入,选择,归并,快速排序的C++实现
- 常用的排序算法 插入-冒泡-选择-归并-快排
- 冒泡、选择、快速、插入、希尔、归并排序算法的小结
- 冒泡、选择、插入、归并、希尔、快速排序效率比较代码
- 排序算法-冒泡、插入、归并、希尔、快速、选择--代码总结
- 冒泡、选择、插入、归并、希尔、快速排序效率比较代码 .
- 排序及选择算法的java实现(一)选择、冒泡、插入、希尔、归并、快排
- 树的创建、插入结点和遍历
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 基本的排序算法(选择、插入、冒泡、希尔、归并、堆、快速)
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 选择、冒泡、快速、归并、插入排序算法的运行时间比较
- 归并排序,插入排序,快速排序,冒泡排序,选择排序的思想
- 六种排序方法的学习(直接插入、希尔、冒泡、快速、选择、归并)
- js访问ifrom里的dom
- POJ2396-带上下限制的最大流
- Android自动化测试初探(一)
- yum 错误 Insufficient space in download directory
- 关于WP7有时商城错误的解决办法
- 插入、冒泡、选择、归并、创建树、树的遍历的代码
- The C programming language 笔记_1
- iphone开发资源汇总
- ajax的一个基本例子
- 周总结2
- 王垠:如何掌握程序语言
- pills
- ORACLE在Linux下内核参数设置
- 嵌入式linux解决方案 | linux kernel驱动模型工程搭建