1.选择排序
   基本思想:
          每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
2.直接插入排序
   基本思想:
          每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
3.冒泡排序
   基本思想:
         依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小 数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为 可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的), 第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。   由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
4.Shell排序
    基本思想:
            先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。  
           该方法实质上是一种分组插入方法。
5.堆排序
       基本思想:
             ① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区   
             ② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key   
             ③由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然 后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n- 1..n],且仍满足关系R[1..n-2].keys≤R[n-1..n].keys,同样要将R[1..n-2]调整为堆。   ……   
            直到无序区只有一个元素为止。
6.快速排序
           基本思想:
                  快速排序(Quicksort)是对冒泡排序的一种改进。
                  它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
7.归并排序
           基本思想:
                  归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
          归并操作的工作原理如下:
             申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
             设定两个指针,最初位置分别为两个已经排序序列的起始位置
             比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
             重复步骤3直到某一指针达到序列尾
             将另一序列剩下的所有元素直接复制到合并序列尾
8.基数排序
          基本思想:
                基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。
                  最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分 组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。   
                 最低位优先(Least Significant Digit first)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。

转载于:https://www.cnblogs.com/gllxy/p/3449773.html

各种排序算法思想小结相关推荐

  1. 希尔排序算法思想及代码

    希尔排序 一.希尔排序算法思想 二.代码 一.希尔排序算法思想 希尔排序是特殊的插入排序,直接插入排序每次插入前的遍历步长为1,而希尔排序是将待排序列分为若干个子序列,对这些子序列分别进行直接插入排序 ...

  2. 算法设计和数据结构学习_2(常见排序算法思想)

    一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...

  3. 关于排序算法思想总结,你该了解这些

    算法图解链接 一,直接插入排序 总体思路:位于表中后面的元素依次与表中前面的元素比较,若比之小,则还需继续和更前面的元素比较,直至遇到一个比它大的元素或者比较到第一个元素(哨兵)了. ①先将第一个元素 ...

  4. 十大排序算法思想和代码总结(Python版)

    Table of Contents 一.概述 二.算法简介及代码展示 1.冒泡排序($O(n^2)$) 2.简单选择排序($O(n^2)$) 3.简单插入排序($O(n^2)$) 4.堆排序($O(n ...

  5. js数组按中文拼音排序_学习排序算法,结合这个方法太容易理解了

    排序是一个经典的问题,它以一定的顺序对一个数组或列表中的元素进行重新排序.而排序算法也是各有千秋,每个都有自身的优点和局限性.虽然这些算法平常根本就不用自己去编写,但作为一个有追求的程序员,还是要了解 ...

  6. 经常使用排序算法实现[交换排序之冒泡排序、高速排序]

    相关知识 1. 稳定排序和非稳定排序: 稳定排序算法会按照相等的关键(换言之就是值)维持纪录的相对次序. 假设排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出如今S之前,在排 ...

  7. 排序算法java 简书_史上最全经典排序算法总结(Java实现)

    查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在 ...

  8. python 排序算法

    冒泡排序 算法思想: 1.相邻元素对比,如果前面元素比后面的大,进行交换,直至最后一个元素,一轮结束之后,最后一个元素为最大值; 2.后一轮进行的列表数量比前一轮少一个; 3.反复进行上面两步,直至没 ...

  9. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...

    史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...

最新文章

  1. 微信说中国人的国庆长假 境内游西湖外滩上榜
  2. json前台后台解析和拼接使用
  3. 服务器监听端口信息,服务器监听端口信息
  4. 一个简单的案例带你入门Dubbo分布式框架
  5. ABAP document read logic
  6. SOLR对多个(关联)表创建索引
  7. 洛谷P3369-----普通平衡树
  8. SQL-92标准 中文翻译
  9. 计算机程序漏洞用英语怎么说,网络用语bug是什么意思,中文翻译是虫子(指电脑程序漏洞)...
  10. 【Android自动化测试】Robot Framework+adb框架(四)——L2层关键字
  11. R语言威尔科克森(Wilcoxon)分布
  12. matlab如何打开dcm_MatLab 与 visual studio 混合编程环境配置
  13. 盒子模型塌陷解决办法
  14. springboot 中的 文件、短信、邮件、token 工具类
  15. Sentry开启 Github sso 配置(self-hosted)
  16. GIS-地理信息系统
  17. REW声学测试(三):生成测试信号
  18. 指尖江湖鸿蒙抽奖,剑网3指尖江湖鸿蒙始清活动怎么玩
  19. html个人信息表制作(适合初学者)
  20. 幼儿园小朋友可以教创业者的事

热门文章

  1. 应用流量管理,新网络管理必修课
  2. 网吧电源和网络布线经验谈(1)
  3. 上账务系统余额并发更新问题记录
  4. 一次有意义的51CTO沙龙归来
  5. 浅谈java内存分配和回收策略
  6. 获取各种常见形状的位图
  7. 搭建yum仓库定制rpm包
  8. .NET零基础入门06:面向对象入门
  9. mysql 在存储过程出现的问题,记录一下
  10. 在ASP.Net中如何彻底杀死Excel进程