| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法设计与分析——简单的排序算法(冒泡排序,选择排序,插入排序) -> 正文阅读 |
|
[数据结构与算法]算法设计与分析——简单的排序算法(冒泡排序,选择排序,插入排序) |
Comparable接口 在实际应用中,我们对一些数据进行排序,通常不会是某个单独的数字,比如根据学生的年龄对学生排序、根据商品的价格对商品进行排序等等,这时我们排序操作的就是一个对象,Java提供了一个接口Comparable就是用来定义排序规则的。 实例:定义一个学生类Student,具有姓名name和年龄age两个属性,通过Comparable接口提供比较规则。
1.冒泡排序 (1)比较相邻的元素,如果第一个元素比后一个元素大,就交换这两个元素的位置 (2)对每一对相邻元素做同样的工作,最终最后位置的元素就是最大值 总结:第一次冒泡,最大值放在最后一位 ???????????第二次冒泡,第二大值放在倒数第二位 ? ? ? ? ? ?依次下去 ? ? ? ? ? ?每冒泡一次元素就会少一个
时间复杂度:O(N^2) 最坏情况下,要排序的元素逆序 元素比较的次数为:(N-1)+(N-2)+(N-3)+...+2+1=N*(N-1)/2 元素交换的次数为:(N-1)+(N-2)+(N-3)+...+2+1=N*(N-1)/2 总执行次数:N*(N-1)/2+N*(N-1)/2=N^2-N 2.选择排序 (1)每一次遍历找出最小值所在的位置 (2)将最小值放在第一个位置,以此类推
时间复杂度:O(N^2) 最坏情况下,要排序的元素逆序 数据比较次数:(N-1)+(N-2)+(N-3)+...+2+1=N*(N-1)/2 数据交换次数:N-1 总执行次数:N*(N-1)/2+N-1 3.插入排序 (1)假设第一个数有序,第二个数与前面一个数比较,若比第一个数小,则将第二个数与第一个数交换位置 (2)第一步后前面两个数已经有序,第三个数与第二个数比较,若比第二个数小,则将第二个数与第一个数交换位置,再与前一个数比较 (3)依次类推
时间复杂度:O(N^2) 最坏情况下,要排序的元素逆序 数据比较次数:(N-1)+(N-2)+(N-3)+...+2+1=N*(N-1)/2 数据交换次数:(N-1)+(N-2)+(N-3)+...+2+1=N*(N-1)/2 总执行次数:N*(N-1) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 14:41:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |