冒泡排序Vs直接选择排序
什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序。拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先。我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据这个字的所在页数准确的定位到这个字的位置。
在查找字的过程中,我们注意到了这种字眼,依据读音找到。
。
。位置。依据页数定位这个字的位置,我们在无意识的情况下,使用到了排序和查找,字典的编写者对整部字典进行了排序。我们的工作就是依据字典的排序方法查找某个记录。
以下具体的介绍排序的相关内容。
排序是一个处理数据的过程,它总是和查找共同出现,由于排序的目的就是方便查找数据。排序的好坏决定了查找的效率。
排序的方法有非常多种,这里我选取了两个较为简单且有代表性的两种排序方法进行比較。
冒泡排序和直接选择排序。以下我将从排序的方法、时间复杂度、稳定性和特点等几方面来介绍。
基本过程:
冒泡排序的过程就是在一个集合中,依次将每两个数据进行比較。然后把较大的数据放到后边。这样,每一个过程结束后,最后一个数据总是最大的。
冒泡排序的过程图示:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk0MjQ2NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
直接选择排序的过程就是,把一个集合中的最小的数据放到一个已经排好顺序的序列中,它和冒泡排序排列次序刚好相反。是从第一个数据開始排列的。直接选择排序图示:
时间复杂度:
能够看得出来,冒泡排序使用到了两层循环,它的时间复杂度是O(n^2);直接选择排序也是用到了两层循环,它的时间复杂度也是O(n^2)。
算法稳定性:
稳定性就是一个数据集合中,如果有两个数据相等。排序结束后,如果两个数据的前后位置发生变化。则这个排序方法是不稳定的。冒泡排序过程总,仅仅有连续的两个数据会交换数据,也就是说,两个同样的数据是不会发生位置交换的,所以冒泡排序是稳定的排序方法。
直接选择排序过程中。不论什么位置的两个数据都有能够交换位置,所以,直接选择排序是不稳定的排序方法。
算法 |
平均时间复杂度 |
最坏时间复杂度 |
空间复杂度 |
稳定性 |
冒泡排序 |
O(n^2) |
O(n^2) |
O(1) |
稳定 |
直接选择排序 |
O(n^2) |
O(n^2) |
O(1) |
不稳定 |
在全部的算法中,没有哪一种是最优的。就时间复杂度而言冒泡排序和直接选择排序。时间代价都是比較大O(n^2);就带排序数据而言。假设初始序列已经基本有序,则使用冒泡排序法更好。它的时间复杂度接近O(n);在实际情况中。我们应该依据不同的情况选择不同的算法。假设有必要,能够同一时候将多种算法结合起来使用。
冒泡排序Vs直接选择排序的更多相关文章
- 冒泡排序与简单选择排序——Java实现
1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...
- java 冒泡排序 二分查找 选择排序 插入排序
下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...
- c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)
1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找
琐碎知识: 水仙花数, ASCII码, 冒泡排序, 简单选择排序, 折半查找 1.水仙花数 每位数的平方的和等于本身. 如100到999之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...
- Java冒泡排序与直接选择排序代码随笔
冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置...第一趟确定一个最大(最小)值放到前边(后 ...
- java 冒泡排序法、选择排序
1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...
- Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析
阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...
随机推荐
- [转]linux之cut命令的用法
转自:http://www.jb51.net/article/41872.htm cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整 ...
- [转]Linux命令之iconv
转自:http://lorna8023.blog.51cto.com/777608/420313 用途说明 iconv命令是用来转换文件的编码方式的(Convert encoding of given ...
- azkaban-executor启动时出现conf/global.properties (No such file or directory)的问题解决(图文详解)
问题详情 // :: INFO [FlowRunnerManager] [Azkaban] Cleaning recently finished // :: INFO [FlowRunnerMana ...
- cocos2d-js 开发常见问题
1. 编译android版本可能出现的问题记录 如果编译的时候报错.出现/platforms/android-14/arch-arm/usr/lib/crtend_so.o: Unknown EABI ...
- 【java基础】java中重载与重写的区别
重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现. ( ...
- python--11、数据库及SQL基础
常用命令记录 查看库中所有表的引擎 SHOW TABLE STATUS FROM `center_main_db`; 还有一个更简洁,查询cmol_system_db库所有表的存储引擎\ SELECT ...
- cms判断写法
cms比较容易写出循环的网页内容,对于有些循环的网页内容有不同css设定,这样在写cms时需要对循环做出条件判断:{if 判断条件}输出内容{else}输出内容{/if}.通过判断可以实现图片轮播效果 ...
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...
- dubbo之路由规则
向注册中心写入路由规则:(通常由监控中心或治理中心的页面完成) RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader ...
- SSL协议提供的服务
SSL协议提供的服务主要有: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器: 2)加密数据以防止数据中途被窃取: 3)维护数据的完整性,确保数据在传输过程中不被改变.