随笔分类 - [19]【结构算法】
摘要:编程论到极致,核心非代码,即思想。 所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。 每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。 其实,我们大多数人都活在“默认状态”下。没有发觉自己的独特可设置选项 思想。 言归正传(呵呵!恢
阅读全文
摘要:【1】桶排序 桶排序(也称箱排序),据坊间演绎,其实现方式有很多。 在此我们仅仅阐述一下本文的实现思想,以便于更好的理解下面的内容,同时加深对桶排序的认识。 首先,说明一点,我们是使用数组模拟桶(最好应该是使用链表模拟)。 所谓数组模拟桶实现排序的过程到底是怎么进行的呢?呵呵!其实还真有点抽象。 实
阅读全文
摘要:【1】完全二叉树 在学习堆排序之前,我们先要了解一下完全二叉树。 若设二叉树的深度为h,除第h层外,其它各层 (1...h-1) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。 完全二叉树特点: (1) 满二叉树是完全二叉树,完全二叉树不一定是满二叉树。 (2) 在满
阅读全文
摘要:【1】选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法 冒泡排序、插入排序、归并排序和基数排序都是稳定的排序算法。 【2】研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。 再简
阅读全文
摘要:【1】归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法也是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并排序的算法复杂度为O(N*logN)。 归并排序算法是稳定的(参见随笔《常用排序算法稳定性分析》)。 【2】归并排序逻辑分析与代码实现 在分析归并排
阅读全文
摘要:【1】希尔排序 严格而言,希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。 该方法又称缩小增量(逐渐缩小排序元素相隔差距)排序。 希尔排序是不稳定排序算法(参见随笔《常用排序算法稳定性分析》)。 【2】希尔排序逻辑 希尔排序逻辑分析: (1)先取一个小于N的整数d1作
阅读全文
摘要:【1】快速排序 快速排序是由托尼。霍尔(英文名C. A. R. Hoare,英国人,计算机领域爵士,同时是文科生获图灵奖者之一)于1962年提出的一种划分交换排序。 快速排序采用的是一种分治策略。快速排序经典之处在于它的排序思想。 所谓分治就是分而治之,从字面意思即可理解为:复杂问题简单化,简单问题
阅读全文
摘要:【1】插入排序 (1)基本概念 插入排序的时间复杂度为O(n^2)。 插入排序是稳定的排序方法(参见随笔《常用排序算法稳定性分析》)。 插入排序算法适用于少量数据的排序。 在此,我们只研究直接插入排序和二分插入排序。 (2)排序逻辑 <1>直接插入排序 直接插入排序是由两层嵌套循环组成的。外层循环标
阅读全文
摘要:【1】选择排序理论 (1)基本概念 选择排序的时间复杂度为O(n*n)。(参见《算法复杂度》) 选择排序是不稳定的排序方法(参见《常用排序算法稳定性分析》)。 选择排序最大的优点是赋值的次数少,这个是其它算法无法比拟的。 (2)排序逻辑 每一趟从待排序的数据元素中选出最小(或最大)的一个元素; 顺序
阅读全文
摘要:【1】算法复杂度 同一个问题可用不同的算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。 算法复杂度分为时间复杂度和空间复杂度。 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小。 【2】时间复杂度 (1)时间频度 一个算
阅读全文
摘要:【1】冒泡排序理论 (1)基本概念 由于在排序过程中一般是小数往前放,大数往后放,相当于气泡往上升过程,所以称作冒泡排序。 如下图(鱼冒泡): 冒泡排序的时间复杂度为O(n*n)。 冒泡排序具有稳定性(参见随笔《常用排序算法稳定性分析》)。 (2)逻辑分析 依次比较相邻的两个数,将小数换到前面,大数
阅读全文
摘要:C语言哈希表 【1】设计数据结构 (1)哈希表由一个结构体HashTable构成 (2)结构体HashTable由两个元素组成。其一为指针数组(链式存储元素);其二为整型变量(记录元素个数) (3)指针数组类型为HashNode *(哈希节点指针) (4)结构体HashNode由数据域和指针域组成。
阅读全文