排序

作者: Jimmy_Nie | 来源:发表于2022-01-03 17:29 被阅读0次

1. 基本概念

排序方式

  • 内排序:整个排序过程中,待排序的所有数据都放置于内存中
  • 外排序:整个排序过程中,待排序的所有数据太多,不止放置于内存中,还需要部分放置于外存

2. 排序方式

算法稳定性:

定义:

  • 假定在待排序的记录序列中,存在多个具有相同的关键字的记录;
  • 若经过排序,这些记录的相对次序保持不变,即在原序列中,A1=A2,且A1在A2之前,
  • 而在排序后的序列中,A1仍在A2之前,则称这种排序算法是稳定的;否则称为不稳定的

应用:

如,一个商品之前按照价格高低排序了,此时需要按照销量排序,采用稳定算法,可以保证销量排序的前提下,保持价格的有序性

排序 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 逻辑思路
冒泡排序 O(N2) O(N) O(N2) O(1) 稳定 与相邻元素两两比较
快速排序 O(nlogn) O(nlogn) O(N2) O(nlogn) ~ O(N) 不稳定 冒泡排序升级版
1. 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小
2. 再按此方法对这两部分数据分别进行快速排序
3. 整个排序过程可以递归进行,以此达到整个数据变成有序序列
简单选择排序 O(N2) O(N2) O(N2) O(1) 稳定 选择集合中最小/大的元素放到最左边,然后是次小/大值,以此类推
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定 简单选择排序的升级版
1.将待排序序列构造成一个大顶堆(根节点的值大于左右子节点),此时,整个序列的最大值就是堆顶的根节点
2. 将根节点与末尾元素进行交换,此时末尾就为最大值
3. 然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值
4. 如此反复执行,便能得到一个有序序列
直接插入排序 O(N2) O(N) O(N2) O(1) 稳定 选择一个中间值,所有数字与该值比较;
根据比较结果,将其放置到中间值左边/右边
希尔排序 O(nlogn) ~ O(N2) O(N1/3) O(N2) O(1) 不稳定 插入排序的升级版
1. 把记录按下标的一定增量分组,对每组使用直接插入排序算法排序
2. 随着增量逐渐减少,每组包含的关键词越来越多
3. 当增量减至1时,整个文件恰被分成一组,算法便终止
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定 采用经典的分治(divide-and-conquer)策略
1. 将问题分(divide)成一些小的问题然后递归求解
2. 治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之**

2.1 简单排序

2.1.1 冒泡排序

2.1.2 选择排序

2.1.3 插入排序

2.2 希尔排序

2.3 堆排序

2.4 归并排序

2.5 快速排序

感觉如下这篇博客写的不错:

相关文章

  • 【恋上数据结构与算法二】(一)排序(Sorting)

    排序方法 冒泡排序 选择排序 堆排序 插入排序 归并排序 快速排序 希尔排序 计数排序 基数排序 桶排序 初识排序...

  • 排序-冒泡排序

    排序系列传递门 排序—选择排序排序—快速排序排序—插入排序排序-希尔排序(待完善)排序—归并排序(待完善)排序—基...

  • 排序

    冒泡排序: 冒泡排序 选择排序: 插入排序: 希尔排序: 归并排序: 快速排序: 堆排序: 计数排序: 桶排序: ...

  • Java | 10种排序算法

    冒泡排序 选择排序 插入排序 希尔排序 计数排序 基数排序 堆排序 归并排序 快速排序 桶排序

  • 常见的排序

    冒泡排序: 选择排序: 插入排序: 快速排序: 希尔排序: 归并排序: 堆排序: 计数排序: 桶排序: 基数排序:

  • 002--20200409刷题

    冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序

  • 排序

    排序 符号:Θ 插入排序 选择排序 堆排序 归并排序 冒泡排序 快速排序 桶排序 基数排序 计数排序 插入排序 插...

  • 排序 -- 选择/插入

    聊聊排序吧 冒泡排序 选择排序 插入排序 快速排序 归并排序 计数排序 桶排序 堆排序 本篇 选择排序与插入排序 ...

  • 前端基础整理 | 算法基础

    排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序

  • Java 常见的 8 种排序算法(内排序)

    排序分类 内部排序 插入排序:直接插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:直接选择排序、堆排序...

网友评论

      本文标题:排序

      本文链接:https://www.haomeiwen.com/subject/wddeqrtx.html