算法基础 | 常用排序算法小结(一)

简介: 算法基础 | 常用排序算法小结

日常吹水

说到这个算法,

可能瞬间大家就觉得那些灰机昏膏素什么的比这个生动活泼多了。

那么,正走在算法之路上的你,

是否还在苦苦寻求修仙之路?

是否被各种排序算法欺负得苦不堪言?

那还等什么,快进来看看

带你全程装逼加一路向西!

刺不刺激?高不高能?

微信图片_20220420152123.jpg


内容提要:

*排序常用术语介绍

*冒泡排序

*选择排序

*插入排序

*希尔排序

*归并排序

*快速 排序

排序基础知识


⚫排序的定义

将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。说得再通俗点,比如将一个班的人(数据元素)按照身高(关键字)站位,高的站前面,矮的站后面咯。



⚫ 排序的分类

排序可分为内排序和外排序。

所谓内排序就是所有的数据和操作都在内存中完成。

而外排序就是说需要排序的数据太大,无法全部塞进内存,需要在内存和外存之间多次数据交换才能完成的排序。


⚫算法优劣的术语说明

⚫稳定:如果Ai=Aj,开始Ai在Aj前面,排完序之后Ai依然在Aj前面。

⚫不稳定:

如果Ai=Aj,开始Ai在Aj前面,而排完序以后Ai有可能跑到Aj后面去了。

⚫时间复杂度:一个算法执行完所消耗的时间。

⚫空间复杂度:执行一个算法需要消耗的内存空间大小。


⚫常见算法的复杂度及稳定性

微信图片_20220420152130.jpg

好了看完上面一堆头(dan)疼的术语介绍,

接下来将为大家介绍几种常用的内部排序算法,

开始我们的表演。

微信图片_20220420152137.jpg1

冒泡排序(Bubble Sort)


⚫常规冒泡排序

冒泡排序算是比较好理解的了。想小编当年入门的时候,就是仰仗着冒泡大法,从此踏入红尘,一去不返……呃这个扯远了,为什么叫冒泡呢?这个后面再解释。为了更好的说明问题,还是用一个数组A[n],以升序(降序方法一样)为例,来给大家一一讲解。


⚫基本原理:


1)从序列的最左边开始,将两两相邻的两个元素(例如A[0]和A[1], A[1]和A[2], A[2]和A[3]等等)进行比较。将小的放左边,将大的放右边。例如A[i] > A[i+1],那么就交换A[i]和A[i+1]的位置。那么经过一轮比较交换以后,A[n]里的值必然是A[0]~A[n]中的最大值。


2) 对剩下的元素A[0]~A[n-1]也进行上述操作。完成后A[n-1]里面存的就是A[0]~A[n-1]中的最大值。


3) 不断对剩下的元素进行上述操作,直到剩下元素只有A[0]时,排序完成。


看不懂嘛?那来试试图片吧:

微信图片_20220420152142.jpg

好了,讲完了基本原理,来看看具体代码是如何实现的吧。

微信图片_20220420152146.jpg

可以看到,在冒泡后,相等元素的位置并不会改变。因此,冒泡算法是稳定的。


冒泡排序改进版

此方法可称为定向冒泡排序,它和冒泡排序的不同之处在于,定向冒泡从左到右把最大数搬到最后面的时候,再反向从右往左把最小值搬到最左边。这种方法稍微比传统冒泡好上那么一丢丢。具体实施看代码。

微信图片_20220420152151.jpg

不理解嘛?没关系,小编还为大家准备了动态图。

微信图片_20220420152156.gif

定向冒泡的优势,比如对序列{4, 5, 6, 7, 8, 2}排序,传统冒泡要访问5次序列,而定向冒泡排序只需要访问一次就OK了。


相关文章
|
5月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
148 7
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
122 8
|
3月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
52 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
3月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
100 9
|
3月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
39 0
数据结构与算法学习十四:常用排序算法总结和对比
|
3月前
|
算法 搜索推荐 Java
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
基数排序是一种稳定的排序算法,通过将数字按位数切割并分配到不同的桶中,以空间换时间的方式实现快速排序,但占用内存较大,不适合含有负数的数组。
44 0
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
36 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
3月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
84 0

热门文章

最新文章