一、排序
    将一组杂乱无章的数据按一定的规律次序排列起来。
    排序的目的是什么?
        *便于查找!
    排序算法的好坏如何衡量?
        *时间效率--排序速度(即排序所花费的全部比较次数)
        *空间效率--占内存辅助空间的大小
        *稳定性--若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。

*内部排序:指待排序记录全部存放在内存中排序的过程。
    *外部排序:指待排序记录的数量很大,以至于内存不能容纳全部记录,在排序过程中尚需对外存进行访问的过程。

排序方法:
        *插入排序
            **直接插入排序
            **希尔排序
        *选择排序
            **直接选择排序
            **堆排序
        *交换排序
            **冒泡排序
            **快速排序
        *归并排序

二、插入排序
    每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
    插入排序有多种具体实现算法:
        1)直接插入排序
        2)希尔排序

(1)直接插入排序
            先将序列中第1个记录看出一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序,排序过程为n-1趟插入。
            *时间效率:因为在最坏的情况下,所有元素的比较次数总和为(0 + 1 + ... + n-1) -> O(n2)。故时间复杂度为O(n2)
            *空间效率:仅占用一个缓冲单元---O(1)
            *算法的稳定性:稳定

(2)希尔排序
            先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di = 1,即所有记录放进一个组中排序为止。
            一般取d1 = n/2,,di+1=di/2,如果结果为偶数,则加1.

三、选择排序
    每一次从待排序的数据元素中选出最小的一个元素,存放在已经排序列的后面,直到全部待排序的数据元素拍完。
    *优点:实现简单
    *缺点:每趟只能确定一个元素,表长为n时需要n-1趟
    *前提:顺序存储结构
    选择排序分为
        1)直接选择排序
        2)堆排序

(1)直接选择排序
            在所有记录中选出最小的记录,把它与第1个路径交换,然后在剩余的记录内选出最小的记录与第2个交换...依次类推。
        (2)堆排序
            堆是满足下列性质的数列{r1,r2,...,rn}

堆排序即是利用堆的特性堆记录序列进行排序的一种排序方法。
            将无序序列建成一个堆,得到关键字最小(或者最大)的记录;输出堆顶的最小(大)值后,使剩余的n-1个元素又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫做堆排序。

输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个堆顶至叶子的调整过程为“筛选”

堆排序的最坏时间复杂度为O(nlog2n),堆排序的平均性能接近最坏性能。
            堆排序的辅助空间为O(1)。

转载于:https://www.cnblogs.com/changemax/p/10015119.html

****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序相关推荐

  1. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  2. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

  3. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

  4. 数据结构与算法笔记(七)—— 选择排序

    什么是选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 算法步骤:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大 ...

  5. 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序

    [前言] 所有代码段都以升序为例,数组下标从0开始.排序的稳定性即:任意两个相等的数据,排序前后的相对位置不发生变化. [冒泡排序(Bubble Sort)] 它重复地访问过要排序的元素序列,依次比较 ...

  6. 冒泡排序,插入排序,选择排序三种算法的优劣

    https://www.jianshu.com/p/9f724c880124 最近听了王争老师的数据结构与算法之美,大有获益,特写此博客与大家分享. 排序算法太多了,但大体可以归结于三类,冒泡排序,插 ...

  7. 内排序及时间复杂度分析-插入排序选择排序交换排序归并排序分配和索引排序对比...

    基本概念 什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成 给定一个序列 R = { r1, r2, ...,rn } ...

  8. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  9. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

最新文章

  1. 多行字符串,带有多余的空格(保留缩进)
  2. [Google Android] Creating Your Own Spelling Checker Service
  3. 什么是空中下载技术?学嵌入式必看!
  4. NHibernate Inheritance Mapping 继承映射
  5. 前照灯检测仪_前照灯检测仪
  6. 虚拟机专用精简版win7系统_新手玩NAS:创建虚拟机,安装WIN10,实现迅雷下载和百度云...
  7. PDF编辑方法,如何裁剪PDF中的一页
  8. Intel Media SDK概述
  9. 【web前端】前端性能优化指南,还不来看看?
  10. 开题报告:基于java医院在线预约挂号系统 毕业设计论文开题报告模板
  11. Netkeeper安装/卸载后wifi消失问题解决方法
  12. 第157章 SQL函数 WEEK
  13. android 为摄像头增加闪光灯(s5pv210)
  14. 小巧易用的分区工具——MiniTool Partition Wizard
  15. 软件测试寻找测试点的思维角度有哪些方面?
  16. 大數據環境搭建,數據採集,數倉環境準備(hive on spark) 01
  17. 公司跟你聊企业文化了吗
  18. 整合nacos配置中心启动报c.a.c.n.c.NacosPropertySourceBuilder: 101 - get data from Nacos error,dataId:xxx.yml
  19. C#中Crystal Report 'crdb_adoplus.dll' could not be loaded的解决办法
  20. IT6263,IT6264是一颗LVDS TO HDMI的桥接芯片

热门文章

  1. nginx php-fpm 输出php错误日志
  2. C#数字日期转成中文日期
  3. Crash -- 生成Minidump调试信息
  4. AndroidStudio安卓原生开发_UI控件_SeekBar_ProgressBar_DataPicker---Android原生开发工作笔记99
  5. 大数据_Hbase-API访问_Java操作Hbase_数据操作_命名空间创建_表创建_表查询---Hbase工作笔记0013
  6. Docker工作笔记001---Docker的简介
  7. 深度理解cnn 网络
  8. 交?叉?验?证?(?分?类?器?性?能?)
  9. 杭电1596find the safest road
  10. Linux c实现一个tcp文件服务器和客户端