排序算法
JavyZheng
这个作者很懒,什么都没留下…
展开
-
希尔(Shell)排序 Java实现
在插入排序中,已经知道,通过交换相邻元素进行排序的任何算法平均都需要Ω(N^2)时间。基于这种认识,希尔排序通过比较相距一定间隔的元素来工作。各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。因此,希尔排序也叫缩减增量排序。希尔排序使用一个序列h1, h2, ..., ht, 叫做增量序列。只要h1 =1, 任何增量序列都是可以的,但在增量上是有文章可做的,一些原创 2013-10-07 10:18:43 · 1018 阅读 · 0 评论 -
归并排序(MergeSort)Java实现
归并排序以O(NlogN)最坏情形时间运行。基本操作是合并两个已排序的表。因为两个表已经排序,将输出放在第3个表中,可以通过对输入数据一趟排序来完成。基本的合并算法是1. 取两个输入数组A和B,一个输出数组C,以及3个计数器Ac, Bc, Cc,他们初始置于对应数组的开始端;2. A[Ac] 和 B[Bc]中的较小者被拷贝到C中的下一个位置,相关的计数器向前推进一步;3. 当两原创 2013-10-07 11:55:37 · 3507 阅读 · 0 评论 -
桶排序
输入数据A1,A2,...,AN 必须只有小于M的正整数组成。使用一个大小为M的称为count的数组,它被初始化为全0;count有M个单元(桶),初始为空;当读 Ai 时,count [Ai] 增 1;所有输入数据读入后,扫描数组count,打印出排序后的表。算法复杂度为 O(M+N)。原创 2013-10-17 10:39:55 · 757 阅读 · 0 评论 -
选择排序 Java实现
/** * 选择排序 * * 基本思想: * * 首先在未排序序列中找到最小元素,存放在排序序列的起始位置,再从剩余 * 未排序元素中继续寻找最小元素,然后放到已排序序列末尾; * 直到所有元素均排序完毕。 * * 算法流程: * 1.外循环i遍历[0, length-1), 并将i赋给min,其中min用来记录最小元素位置; * 2.内循环j遍历[i+原创 2014-03-25 11:32:14 · 867 阅读 · 0 评论 -
堆排序 Java实现
/** * 堆排序 * * 利用优先队列,以 O(NlogN)时间排序 * 1.利用数组元素建立二叉堆,花费O(N)时间 * 2.执行N次deleteMax操作,得到N个元素的排序。每个deleteMax花费O(logN),总花费O(NlogN). * * 具体过程: * 1.以线性时间建立一个最大二叉堆 ; * 2.每次将堆中第一个元素(树根)与最后一个元素交换,堆的大小原创 2013-10-07 11:26:49 · 867 阅读 · 0 评论 -
插入排序 Java实现
插入排序从下标1开始(数组第二个元素),与前面数倒序比较,若小于,则前面数往后移一位,腾出位置,直到大于。利用了前面数已经排序的事实。运行时间为O(N^2).可以证明,通过交换相邻元素进行排序的任何算法平均都需要Ω(N^2)时间。/** * 插入排序 * * 基本思想: 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 *原创 2013-08-17 15:33:24 · 994 阅读 · 0 评论 -
冒泡排序Java实现
/** * 冒泡排序 * * 基本思想:通过不断交换相邻元素,使得最大元素沉到池底。 * * 算法流程 * 1,i从末尾向前遍历 (0, length-1] * 2,j遍历[0,i),如果arr[j]>arr[j+1],则交换两元素,这样[0,i)中最大元素就沉到i位置 * 3,i遍历完后,则数组排好序 * * 时间复杂度O(n^2) * */原创 2014-03-25 11:30:22 · 884 阅读 · 0 评论 -
快速排序 Java实现
/** * 快速排序 * * 采用经典的分治思想,是一种原地排序,平均是O(NlogN). * * 基本思想: * 1,选取第一个元素为基元key; * 2,遍历数组,将比key小的元素放在key左边,比key大的元素放在key右边; * 3,分别对两边进行快排。 * * 具体实施(假设第一个元素下标是start,最后一个元素小标是end): * 1,选取数组第一个元素为原创 2014-03-25 11:42:24 · 981 阅读 · 0 评论