以下并不一一详解个个算法,主要是前天看了下九个基本算法,一时之间有点记忆不住,可能看了某某算法后不能联想骑具体为哪个算法。但他们并不复杂,只是一次九个,难免会思想会混杂。
所以,本文章主要以图片为简介(没看过这些算法的不介意用这个去学,毕竟没详细介绍),让人(主要是我自己看的)一看就能联想起个个算法具体思路。这些算法都不难,相信有思路,那么按照思路就能写出代码,只是熟悉的写的快点,漂亮整洁点,不熟悉的写得慢点。
上图:
待续。。。。
知道具体思路怎样也没用,重要在实际应用,那就得看它们的效率问题了。
引用http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html的分析,如下
性能分析和总结
先不分析复杂度为Ο(n)的算法,因为速度太快,而且有些条件限制,我们先分析前六种算法,即:冒泡,直接插入,二分插入,直接选择,快速排序和改进型快速排序。
我的分析过程并不复杂,尝试产生一个随机数数组,数值范围是0到7FFF,这正好可以用C++的随机函数rand()产生随机数来填充数组,然后尝试不同长度的数组,同一种长度的数组尝试10次,以此得出平均值,避免过多波动,最后用Excel对结果进行分析,OK,上图了。
最差的一眼就看出来了,是冒泡,直接插入和直接选择旗鼓相当,但我更偏向于使用直接选择,因为思路简单,需要移动的元素相对较少,况且速度还稍微快一点呢,从图中看,二分插入的速度比直接插入有了较大的提升,但代码稍微长了一点点。
令人感到比较意外的是快速排序,3万点以内的快速排序所消耗的时间几乎可以忽略不计,速度之快,令人振奋,而改进型快速排序的线跟快速排序重合,因此不画出来。看来要对快速排序进行单独分析,我加大了数组元素的数目,从5万到150万,画出下图:
可以看到,即便到了150万点,两种快速排序也仅需差不多半秒钟就完成了,实在快,改进型快速排序性能确实有微略提高,但并不明显,从图中也能看出来,是不是我设置的最小快速排序元素数目不太合适?但我尝试了好几个值都相差无几。
最后看线性复杂度的排序,速度非常惊人,我从40万测试到1200万,结果如图:
可见稍微调整下算法,速度可以得到质的飞升,而不是我们以前所认为的那样:再快也不会比冒泡法快多少啊?
我最后制作一张表,比较一下这些排序法:
分享到:
相关推荐
本实验报告的主要目的是设计一个磁盘调度模拟系统,旨在使磁盘调度算法更加形象化、易于理解,使磁盘调度的特点更简单明了。通过本实验,学生可以加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描...
+ 设计一个磁盘调度模拟程序,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了。 + 加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解。 + ...
本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等...
在IT领域,启发式算法是一种基于经验和直观的计算方法,用于解决复杂问题,尤其是在面对难以找到精确解或求解成本过高的情况下。启发式算法通过近似的方式寻找问题的满意解,而不是最优解。以下是对文章中提到的四种...
漏桶算法是一种形象的比喻,系统处理请求的能力就像一个漏桶,桶内的水就是等待处理的请求,桶漏水的速率是系统处理请求的能力。如果请求过快地涌入系统,超过了系统处理的速度,那么桶中的水就会溢出,相当于请求被...
子图同构问题,简单来说,是指在一个图(称为全图)中寻找另一个图(称为子图)的同构映射的过程。该问题在化学信息学、图像识别、数据挖掘等多个领域中都有广泛的应用。 在Ullmann算法提出之前,子图同构问题通常...
可以用一个传教士传教的故事来形象地理解K-means算法的工作原理: - 初始阶段,K个传教士随机选择地点设立传教点。 - 居民们根据距离选择最近的传教点听讲道。 - 传教士根据其听众的地理位置调整自己的位置至听众的...
文章中提到的“袋鼠跳问题”是一个非常生动形象的例子,用来说明遗传算法的原理和运作方式。在这个例子中,我们可以把函数的最大值问题想象成袋鼠在多峰山脉中寻找珠穆朗玛峰的过程。在这个过程中,每一只袋鼠都代表...
- **递归算法**:通常更加简洁、直观,但在某些情况下可能导致栈溢出等问题。 - **非递归算法**:通常使用迭代(如循环)的方式解决问题,避免了递归带来的潜在问题,但可能不如递归算法简洁。 **实例分析**: ...
每个蝶形运算涉及两个复数,通过简单的相乘、加减操作,实现复数的快速变换。 **四、谐波计算** 在信号处理中,谐波是指频率为基频整数倍的频率成分。FFT算法可以轻松地揭示信号中的谐波结构。通过对信号进行傅里叶...
2. **丰富的案例分析**:每一章都围绕一个特定的算法、设计技术、应用领域或相关主题展开,通过具体的例子帮助读者更好地理解和掌握算法。 3. **详尽的设计与分析**:书中对算法的设计和分析进行了详细的阐述,让...
Flash是一种交互式矢量图形和多媒体平台,它能够生动形象地展示算法的动态过程。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之一,通过不断交换相邻的错误顺序元素来逐步完成排序。每一轮遍历,最大的元素会...
这个过程可以形象地比喻为在未排序的序列中"挑选"出最小(或最大)的元素,并逐步构造出一个有序序列。 在C++中实现线性选择排序,首先我们需要理解C++的基本语法和数据结构。C++是一种静态类型的、编译式的、通用...
本资源——“数据结构和算法-Flash动画演示”提供了一种生动形象的方式来学习这些核心概念。通过Flash动画,你可以直观地看到各种算法的动态执行过程,使得抽象的理论变得易于理解。 1. **查找算法**:查找算法是在...
本资源集合——"经典数据结构算法flash演示动画"提供了一种生动形象的学习方式,特别适用于数据结构的教学和自我学习。通过Flash动画的形式,这些演示将抽象的概念具象化,使得理解起来更为直观。 首先,我们来探讨...
毫 无疑问,作者用形象的描述,简洁诙谐的语言由浅入深的讲述了这一神奇的算法,相信每个读过的人都会对此有所认识(如果没有,那就是偶的翻译太差了-- b)。 原文链接:...
《世界上最简单的心算法》这本书揭示了数学中的一个神奇领域——心算与速算。作者亚瑟·本杰明和迈克尔·谢尔默通过深入浅出的方式,为我们揭示了如何快速、有效地进行数学计算,使得日常生活中的数字处理变得更加...
插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。这个过程可以形象地理解为玩扑克牌时,将一张张新牌插入到已排序好的牌堆中...
### 跳坑算法的简单实例 #### 一、跳坑算法概述 跳坑算法,又称Basinhopping算法,是一种用于解决多模态优化问题的有效方法。在许多领域,如材料科学中的原子团簇结构预测,跳坑算法因其能够帮助系统跳出局部最优...
形象地说,它就像一个堆叠的盘子,最后一个放上去的盘子最先被取走。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈是指将元素添加到栈顶,而出栈则是从栈顶移除元素。除此之外,还有查看栈顶元素但不移除的操作...