数据结构之路
文章平均质量分 58
SuPerPeng1988
这个作者很懒,什么都没留下…
展开
-
排序算法篇(选择排序)
1. 选择排序选择排序的基本思想是遍历数组的过程中,以 i 代表当前需要排序的序号,则需要在剩余的 [i…n-1] 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序。举个实例来看看:初始: [38, 17, 16, 16, 7, 31, 39, 32, 2, 11]i...原创 2014-11-29 21:21:49 · 124 阅读 · 0 评论 -
排序算法篇(插入排序)
会打扑克的人对于插入算法就很好了解啦,每次扎入一张牌我是会对它排序的。插入排序包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置)。一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:⒈ 从第一个元素开始,该元素可以认为已经被排序⒉ 取出下一个元素,在已经排...原创 2014-11-30 20:03:04 · 101 阅读 · 0 评论 -
排序算法篇(冒泡排序)
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 ...原创 2014-12-01 21:47:51 · 119 阅读 · 0 评论 -
排序算法篇(堆排序)
堆是一种特殊的数据结构,是一种完全二叉树,分为大根堆(根节点的值大于孩子节点)和小根堆(根节点小于孩子节点),建堆和堆排序代码如下:package cn.com.daydayup.test;public class StackSort { public static void main(String[] args) { int[] a = { 26...原创 2014-12-02 15:11:22 · 112 阅读 · 0 评论 -
排序算法篇(快速排序)
1、算法概念。快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。2、算法思想。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。3、实现思路。①以第一个关键字...原创 2014-12-03 12:25:54 · 129 阅读 · 0 评论 -
排序算法篇(希尔排序)
基本思想先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 tmp){ * array[in] = array[in - 1]; * in--; * } ...原创 2014-12-04 10:02:00 · 150 阅读 · 0 评论 -
排序算法篇(基数排序)
基本解法第一步以LSD为例,假设原来有一串数值如下所示:73, 22, 93, 43, 55, 14, 28, 65, 39, 81首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:01 812 223 73 93 434 145 55 65678 289 39第二步接下来将这些桶子中的数值重新串接起来,成为以下的数列...原创 2014-12-05 09:48:44 · 384 阅读 · 0 评论 -
排序算法篇(归并排序)
归并排序归并排序是另一类不同的排序方法,所谓归并,就是把两个或者两个以上的有序表合并成一个新的有序表的过程。归并排序的基本思想:将一个含有n个序列的有序表看成是n个长度为1的有序表,然后两两归并,得到[n/2]个长度为2的有序表,然后再两两归并,直到得到一个长度为n的有序表为止。 下面是归并排序的一个简单的例子:初始值 【49】 【38】 【65】 ...原创 2014-12-06 19:37:02 · 107 阅读 · 0 评论