數據結構與算法目錄(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); } }
天天用心記錄一點點。內容也許不重要,但習慣很重要!數組