| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构与算法——Java实现排序算法(一) -> 正文阅读 |
|
[数据结构与算法]数据结构与算法——Java实现排序算法(一) |
目录 一、排序算法?1.1 排序算法基本介绍?? 将一组数据,依指定的顺序进行排列的过程。 ?? 分类:
??? 常见的排序算法 1.2 衡量程序执行的方法1.2.1 事后统计法?? 这种方法可行但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,这种方式要在同一台计算机的相同状态下运行才能比较哪个算法更快 1.2.2 事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优 二、 时间复杂度2.1 时间频度时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费的时间就对。一个算法中的语句执行次数成为语句频度或时间频度,记为T(n). 忽略常数项 ? 忽略低次项 忽略系数 2.2 时间复杂度??? 一般情况下,算法中的基本操作语句的执行次数是问题规模n的某个函数,用T(n)表示,若某个辅助函数f(n),使得n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)和T(n)的同数量级函数。记作T(n)=0(f(n)),称0(f(n))为算法的渐进时间复杂度,简称时间复杂度。 ? ?2.2.1 常见的时间复杂度常数阶其实是最好的 2.2.2 常数阶O(1)?无论代码执行多少行,只要没有循环等复杂结构,那这个代码的时间复杂度都是O(1) ?上述的代码在执行过程中,它消耗的时候并不随着某个变量的增长而增长,那么无论这类代码多长,即是有几万几十万行,都可以用O(1)来表示它的时间复杂度 2.2.3 对数阶O(log2底n)?这个地方牵扯了高中的一个基础知识,如果不太懂可以看看log相关数学基础知识 2.2.4 线性阶O(n)? 此代码for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的 ? 因此这类代码可以用O(n)来表示它的时间复杂度
2.2.5? 线性对数阶O(nlogN)这个也是很好理解的, 单个while循环是O(log2底n),但是外面的for循环是O(n),所以为O(nlogn)
2.2.6 平方阶O(n方)
?2.2.7 立方阶O(n三次方)、K次方阶O(n的k次方)?? 三层for循环、多层for循环 ?2.3? 平均时间复杂度和最坏时间复杂度
????? 原因是,最坏情况下的时闻复杂度是算法在任何输入实例上运行时间的界限,这就保证了算法的运行时间不会比最坏情况更长。
三、空间复杂度
四、冒泡排序算法??? 基本思想:通过对待排序序列从前往后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换 ?? 简言之: 较大元素从前往后移动。 ??? 优化:(这里是等冒泡排序写好后再进行优化 )因为排序过程中,哥哥元素不断接近自己的位置,如果一趟下来没有进行交过,就说明序列有序。因此在排序过程中设置一个标志flag判断元素是否进行过交换,从而减少不必要的麻烦。 4.1 思路分析?为什么会循环数组大小的n-1次呢? ???? 因为最后一个就不用比了,一定是最小的,放在原位置就行了,比也没有用,这是在这个位置 4.2 代码实现4.2.1 方式1第一个for循环相当于是第几趟排序,第二个for循环相当于第几趟排序里面的小交换
4.2.2 方式2
4.2.3? 优化
五、选择排序算法选择排序也属于内部排序法,是从想要排序的数据中,按指定的规则选出某一个元素,再依照规定交换位置后达到排序的目的。 5.1? 思路分析简要的说:我们并不需要每一次比较都交换两个数,我们只需要转换最小的那个数和我们想要换到的那个位置上的数就行,这样省去中间很多次的交换 5.2 代码实现效率要比冒泡排序算法快很多很多
六、插入排序?? 插入式排序属于内部排序法,是对于想要排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的 ? 6.1 思路分析?? 基本思想:把n个待排序的元素看成为一个有序表,一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出一个元素,把他的排序码一次与有序元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表 下面是从小到大的排序方法 6.2 代码实现
6.3 插入排序存在的问题?如果有一个数很小,而这个数恰好在后面,则需要移动很多次才可以完成这个操作 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 2:36:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |