什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序。拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先。我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据这个字的所在页数准确的定位到这个字的位置。

在查找字的过程中,我们注意到了这种字眼,依据读音找到。

。位置。依据页数定位这个字的位置,我们在无意识的情况下,使用到了排序和查找,字典的编写者对整部字典进行了排序。我们的工作就是依据字典的排序方法查找某个记录。

以下具体的介绍排序的相关内容。

排序是一个处理数据的过程,它总是和查找共同出现,由于排序的目的就是方便查找数据。排序的好坏决定了查找的效率。

排序的方法有非常多种,这里我选取了两个较为简单且有代表性的两种排序方法进行比較。

冒泡排序和直接选择排序。以下我将从排序的方法、时间复杂度、稳定性和特点等几方面来介绍。

基本过程:

冒泡排序的过程就是在一个集合中,依次将每两个数据进行比較。然后把较大的数据放到后边。这样,每一个过程结束后,最后一个数据总是最大的。

冒泡排序的过程图示:

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直接选择排序的更多相关文章

  1. 冒泡排序与简单选择排序——Java实现

    1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...

  2. c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法

    本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...

  3. java 冒泡排序 二分查找 选择排序 插入排序

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...

  4. c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)

    1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...

  5. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  6. Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找

    琐碎知识: 水仙花数, ASCII码, 冒泡排序, 简单选择排序, 折半查找 1.水仙花数 每位数的平方的和等于本身. 如100到999之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...

  7. Java冒泡排序与直接选择排序代码随笔

    冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置...第一趟确定一个最大(最小)值放到前边(后 ...

  8. java 冒泡排序法、选择排序

    1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...

  9. Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析

    阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...

随机推荐

  1. EasyUI系列学习(四)-Droppable(放置)

    一.创建组件 1.使用标签创建一个放置区 <div id="pox" class="easyui-droppable" style="width ...

  2. SVN系列学习(二)-小乌龟的安装与配置

    1.TortoiseSVN的介绍 TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. 2.TortoiseSVN的安装 下载地址:http:/ ...

  3. Linux文件系统inode、block解释权限(三)

    利用文件系统的inode和block来分析文件(目录)的权限问题. 为什么读取一个文件还要看该文件路径所有目录的权限? 为什么目录的w权限具有删除文件的能力,而文件w权限不行. inode:记录文件的 ...

  4. [转]深入理解/proc目录

    Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...

  5. iOS keychain入门

    学了很久的iOS,一直都是明文保存用户名和密码在本地,手机一般都是自己用的,而且非越狱手机东西也不怎么能拿到数据,所以也就没在乎那么多,当然,这是不科学的.悄悄的说,这块一直不是我写的~~~ 用户隐私 ...

  6. 简单TCP代码

    服务器: SOCKET s; s = ::socket(AF_INET,SOCK_STREAM,); sockaddr_in addr; addr.sin_family = AF_INET; addr ...

  7. 移动web——bootstrap响应式工具

    基本介绍 1.利用媒体查询功能并使用这些工具类可以方便的针对不同设备展示或隐藏页面内容. 基本使用 <!DOCTYPE html> <html lang="zh-CN&qu ...

  8. Zabbix 默认网络发现模板修改(第三篇)

    zabbix 默认网络发现模板不能显示ip,我想让他在graph的标题上显示ip,具体要像如下效果 原文地址:http://www.cnblogs.com/caoguo/p/4977254.html ...

  9. HDU_3549_网络流(最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  10. C#斐波那契数列方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...