摘要: 这里采用的是算法导论上的快速排序算法,它的主要思想是: 递归快速排序不说了,主要介绍如何做partition,首先定义两个变量i和j,i的物理意义是表示小于pivot的最后一个元素,j的物理意义是不断向前走,直到比pivot小的元素,然后和i+1元素交换。最后,要把pivot放到合适的位置,由于i表示小pivot的最后一个元素,所以要让pivot和i+1元素交换。 代码如下: pac... 阅读全文
posted @ 2014-03-12 14:42 hansonzhe 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 如果堆的大小是提前知道的,那么可以将堆存储在一个ArrayList或一个数组里。如下图使用数组存储堆,对于位置i处的结点,它的左孩子在位置2i+1处,它的右孩子在位置2i+2处,而它的父亲在位置(i - 1)/2处。如下是一些堆具有的常见操作:添加一个新结点:为了给堆添加一个新结点,首先将它添加到堆的末尾,然后和它的父节点比较,如果大,就上移,直到不必父节点大。删除根节点:经常需要从堆中删除最大的元素,也就是这个堆中的根节点。删除根节点之后就必须重建这个树以保持堆的特性,重建过程如下: 将最后一个节点放到根节点当做当前节点; 然后和左右子节点比较,如果当前节点是这三个节点中最大的,那么这棵.. 阅读全文
posted @ 2014-03-12 11:58 hansonzhe 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 算法思想:算法在每次遍历中,比较连续相邻的元素,如果某一对元素是降序,则互换它们的值,否则,保持不变。就像较小的值像“气泡”一样逐渐浮向顶部,而较大的值沉向底部。package introjava;public class BubbleSort { public static void bubbleSort(int[] list){ boolean needNextPass = true; for(int k = 1; k list[i + 1]){ int temp = list[i]; list[i] = list[i + 1]; ... 阅读全文
posted @ 2014-03-12 09:42 hansonzhe 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 算法思想:算法将数组分为两个子数组,然后对每个子数组递归应用归并排序。package introjava;public class MergeSort { public static void mergeSort(int [] list){ if(list.length > 1){ //这是递归跳出的条件,一定要记住!!! int firstHalfLen = list.length / 2; int [] firstHalf = new int[firstHalfLen]; System.arraycopy(list, 0, firstHalf, 0, ... 阅读全文
posted @ 2014-03-12 09:05 hansonzhe 阅读(145) 评论(0) 推荐(0) 编辑