数据结构&算法
Loreen368
武汉某985高校毕业
展开
-
在N个数中找出出现奇数次的数
从第一个数开始一直异或到最后一个数,最后的结果便是这个数 时间复杂度:O(n) 异或性质 1. 交换律 2. 结合律(即(a^b)^c == a^(b^c)) 3. 对于任何数x,都有x^x=0,x^0=x 4. 自反性 A XOR B XOR B = A xor 0 = A举个例子: 1 ^ 2 ^ 1 ^ 3 ^ 2 = 2 即这个出现奇数次数的数是原创 2016-07-29 11:40:24 · 1647 阅读 · 0 评论 -
【排序】冒泡排序
/** * 冒泡排序 * @param a 给定数组 */ public static void bubbleSort(int[] a){ for(int i=a.length-1;i>=0;i--){ boolean isSwap = false; for(int j=1;j<=i;j++){ if(a[j-1]>a[j]){ int temp原创 2016-08-17 16:54:11 · 346 阅读 · 0 评论 -
【排序】快速排序
/** * 快速排序 * @param a * @param low * @param high */ public static void quickSort(int[] a, int low, int high) { int l = low; int h = high; if (l >= h) { return; } int temp = a[l原创 2016-08-17 18:49:25 · 249 阅读 · 0 评论 -
【排序】堆排序
思路:堆排序执行过程描述如下:(大顶堆)1)从无序序列所确定的完全二叉树的第一个非叶子结点开始,从右到左,从下到上,对每个结点进行调整,最终将得到一个大顶堆。对结点的调整方法:将当前结点(假设为a)的值与其孩子结点进行比较,如果存在大于a值的孩子结点,从中选出一个最大的一个与a交换。当a来到下一层的时候重复上述过程,直到a的孩子结点值都小于a的值为止;2)将当前无序序列中的第一原创 2016-08-17 23:06:22 · 330 阅读 · 0 评论 -
【查找】折半查找/二分查找
/** * 折半查找 * @param a 给定数组 * @param low * @param high * @param k 需要查找的数字 * @return */ public static int bSearch(int[] a, int low, int high, int k){ int mid; //循环 while(low<=hi原创 2016-08-18 09:00:38 · 327 阅读 · 0 评论 -
java反转单链表
class Node { private int data; private Node next;}public static Node reverseLinkedList(Node head){ if (head == null || head.next == null){ return head; } Node first = head; Node cur = hea原创 2016-08-17 11:20:21 · 289 阅读 · 0 评论 -
【数据结构】二叉排序树和平衡二叉树对比
总分支数 = 总结点数 - 1叶子结点数 = 双分支结点数 + 1前序遍历:根左右中序遍历:左根右后序遍历:左右根注意:知道前序和后序不能唯一确定一棵二叉树原创 2016-09-20 16:46:19 · 664 阅读 · 0 评论