自我整理:几种排序算法的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Victordas/article/details/82866867

简单来自己做个笔记,温故一下排序方法。

1.直接排序
顾名思义,直接排,怎么直接排,每次循环找出最下的扔到第一个,或者找到最大的扔到最后一个,剩下的数字,继续循环找最小的往前扔,暴力排完。简单粗暴,居家必备。

2.插入排序
顾名思义,通俗易懂,插入排序,就是数据互相插,但首先要选个起点和空才能插。于是我们选择一个key值, 每个数和key比较,比他小插左边,比他大插右边,大致思想是这样子,不过实现起来还是要比较很多次,时间复杂度和直接排序没有差。

3.冒泡排序
顾名思义,冒泡,就是让数据飘起来,987654321为例,通过和自己相邻的数字比较,让9飘上去876543219,到了第一个,每个数字都这样操作,最后就有序了,这个过程可以说是很beautiful了,但是极端时间复杂度还是很高,我直接排序还是不服。

4.希尔排序
插入排序升级版,插入排序的数学改进,插入麻烦就麻烦在,插完之后还要再比较,要是极端乱序十分复杂。希尔排序,就相出了个好办法,不断分组,假设这个分组值是2吧,我们不直接插,我们分组插,姑且称为宏观插入,132465这个数组,分组值是2,length是6, 那咱就分6/2=3组,每组分别是[1,4],[3,6],[2,5], 每小组进行插入排序,排完之后,再分组,3/2=1, 等于1其实就是插入排序了,再对这个相对于乱序而言有序的数组进行插入排序,就轻松了很多是吧。但是极端情况O(n^2),还是很大嘞,我直接排序还是不服。

5.快速排序
据我理解,就是不断地取key值,比key小的放左边,比key大的放右边,然后继续取key继续操作。好像比较快,但是极端情况,时间复杂度还是O(n^2)。

6.堆栈排序

堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

需要用到完全二叉树,我得画个图。。这是大堆,一般用来拍升序的
小堆排降序
在这里插入图片描述
然后排序
满足对定义
在这里插入图片描述
堆排序是一种选择排序,整体主要由构建初始堆+交换堆顶元素和末尾元素并重建堆两部分组成。其中构建初始堆经推导复杂度为O(n),在交换并重建堆的过程中,需交换n-1次,而重建堆的过程中,根据完全二叉树的性质,[log2(n-1),log2(n-2)…1]逐步递减,近似为nlogn。所以堆排序时间复杂度一般认为就是O(nlogn)级。

7.归并排序
和快速排序很像,一直二分排序。

8.基数排序
先排个位再排十位一直排到最高位。。。 稳定排序

猜你喜欢

转载自blog.csdn.net/Victordas/article/details/82866867
今日推荐