
阿布学数据结构
阿布哥
这个作者很懒,什么都没留下…
展开
-
阿布学排序之快速排序
package quicksort; /** * 快速排序是一种划分交换排序,采用了分治策略 * 思想: * 1、先从数列中取出一个数作为基准数 * 2、将比这个数大的数全都放到它的左边,比它小的全都放它右边 * 3、再对左右区间重复第二步,直到各区间只有一个数 * @author AbuGe * 例: * 0 1 2 3 4 5 6 7 8 9 * 72 6 5原创 2014-05-16 11:26:18 · 434 阅读 · 0 评论 -
阿布学排序之归并排序
package merge; import javax.lang.model.element.Element; /** * 归并排序: * 归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共需要logN步,每步都是一个合并有序数列的过程,时间复杂度为O(N),故一共为 * O(NlogN). * @author AbuGe * */ public class Merge原创 2014-05-19 10:52:33 · 773 阅读 · 0 评论 -
阿布学排序之希尔排序
package com.abuge; /** * 希尔排序: * 实质:分组插入排序,又称为缩小增量排序 * 思想: * 先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行直接插入排序。 * 因为直接插入排序是在基本有序的情况下(接近最好情况)效率是很高的。 * 第一种方法(把一组元原创 2014-06-23 16:08:43 · 489 阅读 · 0 评论 -
阿布学排序之冒泡排序
package com.abuge; /** * 冒泡排序: * 设数组长度为N * 方法1: * 步骤:(升序) * 1、比较相邻两个数如果前面的数据大于后面的数据,则交换 * 2、这样数组的第0-N-1个数据进行遍历后,最大的一个数据就在第N-1个位置 * 3、N=N-1,如果N不为0,就重复执行前面两步,否则排序完成 * * 方法2: * 设置循环标志,如果有一趟发生了原创 2014-06-24 10:05:20 · 507 阅读 · 0 评论 -
阿布学排序之堆排序
/** * 需求:堆排序的实现 * 知识储备: * 满二叉树:除叶子结点外的所有结点均有两个子结点,所有叶子结点必须在同一层上。 * 完全二叉树: * 若二叉树的深度为h,除第h层外,其它各层(1~h-1)的节点数都达到最大个数,第h层所有结点都连续集中在最左边。 * 完全二叉树是有满二叉树而引出来的,对于深度为K的,有N个结点的二叉树,当且仅当每一个结点都与深度为K的满二叉树中编号从原创 2014-05-15 17:08:12 · 686 阅读 · 0 评论 -
阿布学排序之直接选择排序
package select; /** * 需求:直接选择排序 * 方法:将数据分为有序区和无序区,然后从无序区选一个最小元素,放在有序区的最后 * 步骤:设数组为a[0...n-1] * 1、初始时,数组全为无序区a[0...n-1],令i=0; * 2、在无序区a[i...n-1]中选择一个最小元素,并将其与a[i],交换之后a[0...i]就形成了一个有序区 * 3、i++重复2原创 2014-05-30 11:49:20 · 582 阅读 · 0 评论 -
阿布学排序之直接插入排序
package insertsort; /** * 需求:直接插入排序 * 思想:每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止 * 步骤:设数组为a[0..n-1] * 1、初始时,a[0]自成一个有序区,无序区为a[1...n-1]。令i=1 * 2、将a[i]并入到当前的有序区a[0...i-1]中形成a[0...i]的有序区原创 2014-06-02 17:09:44 · 508 阅读 · 0 评论