数据结构与算法目录(http://www.javashuo.com/article/p-qvigrlkr-da.html)html
二叉树也能够用数组存储,能够和彻底二叉树的节点一一对应。java
// 二叉树保存在数组中 int[] data; public void preOrder() { preOrder(0); } // 前序遍历指定的节点 public void preOrder(int index) { System.out.printf(data[index] + " "); int leftIndex = 2 * index + 1; int rightIndex = 2 * index + 2; // 左子树 if (leftIndex < data.length) { preOrder(leftIndex); } // 右子树 if (rightIndex < data.length) { preOrder(rightIndex); } }
椎排序是选择排序中的一种,也是找出最大的一个数再进行交换位置。椎仅为大椎和小椎,所谓大椎就是树的全部父节点的值都比子节点大的树。算法
public void heapSort(int[] arr) { // 找到最大的非叶子节点 int start = (arr.length - 1) / 2; for (int i = start; i >= 0; i--) { maxHeap(arr, arr.length, i); } for (int i = arr.length - 1; i > 0; i--) { int tmp = arr[i]; arr[i] = arr[0]; arr[0] = tmp; maxHeap(arr, i, 0); } } // 转换指定索引位为大顶堆,大顶椎的第一个节点必定是数组中的最大值 public void maxHeap(int[] arr, int size, int index) { int leftIndex = 2 * index + 1; int rightIndex = 2 * index + 2; int maxIndex = index; if (leftIndex < size && arr[leftIndex] > arr[maxIndex]) { maxIndex = leftIndex; } if (rightIndex < size && arr[rightIndex] > arr[maxIndex]) { maxIndex = rightIndex; } if (maxIndex != index) { int tmp = arr[index]; arr[index] = arr[maxIndex]; arr[maxIndex] = tmp; maxHeap(arr, size, maxIndex); } }
天天用心记录一点点。内容也许不重要,但习惯很重要!数组