IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 排序(Sort)知识点归纳 -> 正文阅读

[数据结构与算法]排序(Sort)知识点归纳

目录

1.基本概念

两种基本操作:

三种待排序存储方式

2.插入排序

直接插入排序

1.时间复杂度

2.空间复杂度

3.算法稳定性

?希尔排序

注意:

3.交换排序

冒泡排序(Bubble Sort)

原理:

时间复杂度:

快速排序:

算法描述

平均时间复杂度O(nlog n)

缺点:不稳定

4.选择排序

直接选择排序

【概述】

【排序过程】

堆排序

算法描述

5.归并排序

6.分配排序

箱排序:

基数排序:取多次关键字排序

7.内部排序方法比较


1.基本概念

按给定的关键字递增/递减的次序排列

两种基本操作:

  • 比较两个关键字大小
  • 改变指向记录的指针或移动记录本身

三种待排序存储方式

  • 顺序存储
  • 链式存储
  • 辅助表形式

2.插入排序

直接插入排序

1.时间复杂度

最好情况就是全部有序,此时只需遍历一次,最好的时间复杂度为O ( n )?
最坏情况全部反序,内层每次遍历已排序部分,最坏时间复杂度为O(n^2)

综上,因此直接插入排序的平均时间复杂度为 O(n^2)

2.空间复杂度

辅助空间是常量
平均的空间复杂度为:O (1)

3.算法稳定性

相同元素的前后顺序是否改变

直接插入排序是稳定的

?希尔排序

希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止

注意:

最后一个增量必须是1 !!!

3.交换排序

冒泡排序(Bubble Sort)

原理:

每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。

而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。


代码

//冒泡排序两两比较的元素是没有被排序过的元素--->
public void bubbleSort(int[] array){
    for(int i=0;i<array.length-1;i++){//控制比较轮次,一共 n-1 趟
        for(int j=0;j<array.length-1-i;j++){//控制两个挨着的元素进行比较
            if(array[j] > array[j+1]){
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

时间复杂度:

时间复杂度为 O(n^2)

快速排序:

算法描述

快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。执行如下操作:

从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
?

平均时间复杂度O(nlog n)

缺点:不稳定

4.选择排序

直接选择排序

【概述】

直接选择排序又称简单选择排序,是一种不稳定的排序方法,其是选择排序中最简单一种,其基本思想是:第 i 趟排序再待排序序列 a[i]~a[n] 中选取关键码最小的记录,并和第 i 个记录交换作为有序序列的第 i 个记录。

其实现利用双重循环,外层 i 控制当前序列最小值存放的数组元素位置,内层循环 j 控制从 i+1 到 n 序列中选择最小的元素所在位置 k

【排序过程】

1.排序过程
具体的排序过程为:

将整个记录序列划分为有序区和无序区,初始时有序区为空,无序区含有待排序的所有记录
在无序区选择关键码最小的记录,将其与无序区中的第一个元,使得有序区扩展一个记录,同时无序区减少了一个记录
不断重复步骤 2,直到无序区只剩下一个记录为止
2.实例
?初始关键字:『 8,5,2,6,9,3,1,4,0,7 』

?第一趟排序后:0,『5,2,6,9,3,1,4,8,7』

?第二趟排序后:0,1,『2,6,9,3,5,4,8,7』

?第三趟排序后:0,1,2,『6,9,3,5,4,8,7』

?第四趟排序后:0,1,2,3,『9,6,5,4,8,7』

?第五趟排序后:0,1,2,3,4,『65,9,8,7』

?第六趟排序后:0,1,2,3,4,5,『6,9,8,7

?第七趟排序后:0,1,2,3,4,5,6,『9,8,7

?第八趟排序后:0,1,2,3,4,5,6,7,『89

?第九趟排序后:0,1,2,3,4,5,6,7,8,『9

?结果: ? ? ? ? ?『 0,1,2,3,4,5,6,7,8,9 』
————————————————
版权声明:本文为CSDN博主「Alex_McAvoy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011815404/article/details/79256237

堆排序

堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆

算法描述

将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;
将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];
由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。
?

5.归并排序

6.分配排序

箱排序:

箱排序也称桶排序(Bucket Sort),其基本思想是:设置若干个箱子,依次扫描待排序的记录R[0],R[1],…,R[n-1],把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次将各非空的箱子首尾连接起来(收集)。

适用于:

关键字取值范围小

基数排序:取多次关键字排序

利用分配和收集两种基本操作。基数排序是一种按记录关键字的各位值逐步进行排序的方法。此种排序一般适用于记录的关键字为整数类型的情况。所有对于字符串和文字排序不适合。

7.内部排序方法比较

?

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:31:09  更:2022-08-19 19:32:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 11:31:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码