
数据结构
vipyeshuai
这个作者很懒,什么都没留下…
展开
-
数据结构算法之排序系列Java、C源码实现(1)--直接插入排序
使用插入排序,对于具有n个记录的文件,要进行n-1趟排序,是稳定的插入排序。直接插入排序:从未排序的序列中依次取出一个元素与已排序列中的元素进行比较,然后将其放在已排序序列的合适位置上。思想宗旨就是将无序的数据向有序的数据中插入 ,默认选择比较的元素是有序序列的最大值开始比较(高级一点的算法,可以采用二分查找)来选取这个开始比较的元素实际就是有序原创 2016-02-27 11:05:55 · 663 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(2)--希尔排序
希尔排序 先将整个待排序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对整个记录进行一次直接插入排序,其实希尔排序就是分组直接插入排序。java代码:public class ShellSort {public static void main(String[] args) {int array[] = {2,10,4原创 2016-02-27 13:23:43 · 557 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(3)--直接选择排序
直接选择排序 首先在所有记录中选出码最小的记录,把它与第1个记录交换,然后在其余的记录内选出排序码最小的记录,与第2个记录交换…依次类推,直到所有记录排好序。直接选择排序的平均时间复杂度O(n2)java代码:public class Straight_Select {public static void main(String[] args) {int array原创 2016-02-27 13:51:25 · 543 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(4)--堆排序
堆是一种树形结构,堆排序是对直接选择排序的有效改进。实现堆排序需要解决三个问题:1.构建完全二叉树:先把待排序序列构建成一棵完全二叉树。 2.把无序序列建成的完全二叉树调成一个有序堆。然后根据以下定义建堆: n个元素的序列{k1, k2, …., kn}当且满足下述关系时,称之为堆。 前者称为小顶堆(小根堆),后者称为大顶堆(大根堆)。从一个无序序列建堆的过程就原创 2016-02-27 14:00:19 · 563 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(5)--冒泡排序
冒泡排序 冒泡排序最好的时间复杂度是O(n)。反之,最坏情况下为O(n2)。 冒泡排序是就地排序,且它是稳定的。第一趟得到的最后位置上的关键字一定是最大的或者最小的。 冒泡排序是一种比较简单的排序java代码:public class BubbleSort {public static void main(String[] args) {int array[]原创 2016-02-27 14:08:39 · 642 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(6)--快速排序
快速排序采用一种分治的方法,通常又称为分治法。思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些问题,然后将这些子问题的解组合为原问题的解。快速排序就是先找到一个中间轴(一般从起始位置也就是low开始)将 比该值小的数据放左边,比该值大的数据放到右边实现过程,就是low、high 类似于指针的走位,比pivot值大的交换到high处,比pivot值小的放到low原创 2016-02-27 14:11:53 · 680 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(8)--基数排序
基数排序 这是一种和前述算法完全不同的排序方法。前述算法都要进行关键字的比较,而基数排序不需要进行记录关键字之间的比较。 链式基数排序 思想:从低位到高位一次对待排序的关键码进行分配和收集,经过d趟分配和收集,就可以得到一个有序序列。1.若关键字是十进制整数,则按个、十、百等位进行分解,基数rd=10,C0=0,C9=9,d为最长整数的位数。2.若关键字是小写的英文字,则原创 2016-02-27 14:32:44 · 918 阅读 · 0 评论 -
数据结构算法之排序系列Java、C源码实现(9)--总结
类别排序方法平均情况最好情况最坏情况辅助存储稳定性插入排序直接插入0(n2)O(n)0(n2)O(1)稳定希尔排序0(n1.3)O(n)0(n2)O(1)不原创 2016-02-27 14:36:24 · 644 阅读 · 0 评论