排序的概念

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次
序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排
序算法是稳定的;否则称为不稳定的。两个数相等时,第一个数排序前在另外一个数之前,拍完序之后还在另外一个数之前。

内部排序:数据元素全部放在内存中的排序。

外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

常见的几大类排序


基数排序,数据约束比较明显,这七种排序比较通用

插入类排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一
个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列

每次遍历到一个数,找到前面小于等于它时候的位置

         因为前面已经排好的全部时有序数列,最大的数已经时有序数列中最后的那个数如果正好和前一个数相等或者大于前一个数,则直接end+1回到待排序数的下标,等于keyi跳到下一个数继续判断如果小于的话,往后移动,则从end下标开始,遍历整个有序数列,找到key>某个数的时候,直接让end+1=key,原来的end+1位置的数已经移动到end+2位置所以直接让直接让end+1=key,完成插入,如果end=-1表示,有序数列中最小的数都比key小,则end+1下标回到0,数组第一个元素的位置就是key


希尔排序为了解决直接插入排序的一些缺点,希尔排序,通过分组的方法,让数据在每次进行直接插入排序的时候都是接近有序的。对直接插入排序进行更改。

以前直接插入时,end+1,其实就是希尔排序中分组间隔为一时候的情况
现在,有分组间隔,所以每回在组内搬运元素,每回end+分组间隔gap就行每个小组排完序后数组接近有序,分组间隔减一,再排序,最后一次插入排序,整个数组接近有序
最后一次插入排序,整个数组接近有序,直接插入最快

排序(基本概念及分类,直接插入排序和希尔排序)相关推荐

  1. python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...

    其实本文叫排序算法总结有点过了,只是用python实现了一遍.本文都是参照一篇csdn博客<数据结构排序算法>,里面详细介绍每种排序算法的原理,并给出了C++的实现,再次膜拜. # -*- ...

  2. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  3. 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)

    1.排序算法 1.排序的分类 分为内部排序和外部排序,其中内部排序分为插入排序.选择排序.交换排序.归并排序和基数排序.插入排序包括直接插入排序和希尔排序:选择排序包括简单选择排序和堆排序:交换排序包 ...

  4. java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序

    好吧 ~~csdn太难用了....尼玛...写了半天的也无法弄进去...lz正在找更好地博客,or放在github上打算.. 下边是lz自己的有道云分享,大概内容是 http://note.youda ...

  5. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  6. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  7. 图文并茂 —— 插入排序,希尔排序

    图文并茂 -- 插入排序,希尔排序 每博一文案 杨绛先生曾说:世态人情,可做书读,可当细看.行走在人生的旅途中, 遇见的人数不胜数,结识的朋友也越来越多,走过半身,尝遍人情冷暖, 后领悟到一句话的真谛 ...

  8. 插入排序,希尔排序,堆排序

    本文将介绍三种排序算法--插入排序,希尔排序,堆排序.本文所有例子都是使用升序 一.插入排序 算法思想 维护一个有序数组,将要插入的数据与有序数组自最后一个元素直到合适位置的数一一比较. eg: 有序 ...

  9. 直接插入排序、希尔排序

    直接插入排序.希尔排序 一.直接插入排序 (1)主要思想 (2)代码实现 (3)性能分析 二.希尔排序 (1)主要思想 (2)代码实现 (3)性能分析 一.直接插入排序 直接插入排序类似于我们平时玩扑 ...

  10. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

最新文章

  1. 左转待转区----当同向直行信号灯绿灯亮时,左转弯的车辆进入左转待转区等候放行信号(即使此时左转弯灯是红色的) 注意:当直行红灯时候禁止进入...
  2. 常规循环引用内存泄漏和Closure内存泄漏
  3. Java技术分享:如何设计一个本地缓存?
  4. jQuery-1.9.1源码分析系列(二)jQuery选择器续2——筛选
  5. 算法 --- 判断某个值是否在二叉搜索树中
  6. 程序员应该如何提问?
  7. 说一个闭包在实际开发中的应用
  8. Nodejs API
  9. sqlite 自动增长
  10. sql 整改措施 注入_防止SQL注入的五种方法
  11. angular input 为file on-change 无效
  12. 正则爬取猫眼电影排行榜 待修改版
  13. Javascript学习之创建对象
  14. 电子元器件选型——功率电感
  15. 特殊符号大全分享给大家,直接复制粘贴就可以使用了!
  16. java NIO网络编程
  17. 电脑上查看自己连接的WIFI密码
  18. ssh配置公钥解决免密登录
  19. element ui table实现考勤排班表
  20. js 延期执行_如何用javascript设置延时执行

热门文章

  1. 02-再探MySQL数据库
  2. mysql基本命令入门
  3. maven project module 依赖项目创建 ---转
  4. MVC View显示详解(RenderBody,RenderPage,RenderSection,Partial)
  5. vagrant使用centos的环境安装..
  6. 基于Windows 7旗舰版搭建WinCE6.0开发环境的过程
  7. 您可能不知道的 C++ 关键字
  8. IE Mobie6清除浮动
  9. 6.22打包建立ISS虚拟目录,安装完运行你想运行的程序
  10. winfrom软件开发汽车测试_ETci — 全自动软件测试调度(持续集成)平台