各种排序算法(伪教程,大概会更新)
scratch吧
全部回复
仅看楼主
level 7
gMr 楼主
[阴险]
2018年09月09日 03点09分 1
level 7
gMr 楼主
2018年09月09日 03点09分 2
level 7
gMr 楼主
先贴个链接https://www.aerfaying.com/MProject?id=207797随后逐个讲解(我可能讲的有错,欢迎提出)[滑稽]
2018年09月09日 03点09分 3
gMr
堆排序以后再加,有点懒
2018年09月09日 03点09分
level 7
gMr 楼主
插入排序:
时间复杂度O(n^2)
代码很短,解释一下,l是要排序的部分的最左一位,r是最右一位,为了方便理解,这里l=1,r=10。
插入排序的主要思想是每次往已经有序的序列中插入一个数,这里可以把i左边的看成已经有序的,i右边的看为正在排序的序列,第i位即是当前所需插入的数。
我们逐句分析:i设定为1+1,也就是第二位,重复执行直到i>10。
这里可以看成for(int i=1+1;i<=10;i++)也就是从第2位扫到第10位。
然后j设定为1,重复执行知道j>i-1也就是从第1位扫到第i-1位,直到找到一个比当前需要插入的数还要大的数,将数插入。
假设有一个序列{1,3,5,2,8,4,9,6,10,7}
我们来模拟一下原程序。
{1,3,5,2,8,4,9,6,10,7}
------i----------------------------------------
{1,3,5,2,8,4,9,6,10,7}
-----------i-----------------------------------
{1,3,5,2,8,4,9,6,10,7}
----------------i------------------------------
{1,2,3,5,8,4,9,6,10,7}
--------------------i--------------------------
{1,2,3,5,8,4,9,6,10,7}
-------------------------i---------------------
{1,2,3,4,5,8,9,6,10,7}
------------------------------i----------------
{1,2,3,4,5,8,9,6,10,7}
----------------------------------i------------
{1,2,3,4,5,6,8,9,10,7}
----------------------------------------i------
{1,2,3,4,5,6,8,9,10,7}
---------------------------------------------i-
{1,2,3,4,5,6,7,8,9,10}
-----------------------------------------------i 这时i>10跳出循环。
插入排序是一种很容易理解的排序,但是速度较慢。
2018年09月09日 03点09分 6
gMr
补充一句,插入排序是稳定的
2018年09月09日 03点09分
level 7
gMr 楼主
冒泡排序:
时间复杂度O(n^2)
代码也很短。
冒泡排序的思想是重复走这个序列,每次比较两个相邻的元素,如果发现他们不符合顺序便交换两者。这个很好理解。就不过多解释了,另外提一下,如果比较的时候用的是>或<小于,冒泡就是稳定的,但如果用的是≥或≤,冒泡便变成了不稳定的算法。
2018年09月09日 03点09分 8
gMr
再b一句,每一趟之后未排序部分的最大项便会跑到最后去,所能达到有序
2018年09月09日 14点09分
@gMr 那,swap的程序哪里去了[滑稽]
2018年09月19日 04点09分
gMr
@初秋夜落 [喷]swap还用教吗,比如交换a[i],a[j],弄个临时变量,临时变量=a[i],a[i]=a[j],a[j]=临时变量
2018年09月20日 11点09分
level 7
gMr 楼主
啊好累,先更到这,到时候在更
2018年09月09日 03点09分 9
level 11
巨佬!!!太强了!%%%!Orz%%%
2018年09月09日 06点09分 10
gMr
@姓q的那位 这是水贴qwq顺便%一下各位大佬orz
2018年09月09日 06点09分
level 7
我提个意见(大佬莫喷):
关于这种教程,专业性很强,对于萌新来说很有可能看不懂啊……
所以要“语言浅显易懂,生动形象,运用各种修辞手法”(???[滑稽]
2018年09月09日 09点09分 11
gMr
[喷]
2018年09月09日 13点09分
gMr
@gMr 这个是最基本的排序[喷]
2018年09月09日 13点09分
@gMr 嗯。但是新人真的看不懂。我学过,我觉得你的语言还是要“浅显易懂,生动形象,运用各种修辞手法”[滑稽]
2018年09月10日 09点09分
level 9
你得先讲大O表示法等等,不然萌新看不懂。
2018年09月09日 11点09分 12
吧务
level 15
点进来还以为是动图[阴险]
2018年09月09日 11点09分 13
gMr
去那个链接看啊[滑稽]虽然不是很明显但是很爽(x
2018年09月09日 13点09分
level 11
技术好评
2018年09月09日 13点09分 14
level 7
gMr 楼主
我又回来水了[滑稽]
2018年09月10日 08点09分 15
level 7
gMr 楼主
选择排序:
顾名思义,每次找到未排序部分最小的数,放到已排序序列的末尾。
本来有个模拟的。。。不小心刷新网页了[阴险]不想再写一遍
其实很好理解的啦,仔细看看
2018年09月10日 09点09分 16
swap,讲究!
2018年09月17日 11点09分
level 7
gMr 楼主
归并排序(开始比较精彩的了):
程序:
归并排序是一个采用分治法的一个非常经典的运用,没错,用到了递归[滑稽]
我们来看一张图:
这个程序先将这个序列拆分成很多个小序列(程序上面一部分),拆分到无法拆分时便开始合并。
合并过程很简单(程序下面一部分),其实就是二路归并,这里贴个链接,讲的很详细:https://www.cnblogs.com/chengxiao/p/6194356.html
因为每一边的序列都是有序的,所以可以用这种二路归并的方式。
归并排序的缺点就是空间占用大,我们需要另一个数组来储存归并后的序列,然后再复制到原数组。
2018年09月10日 09点09分 18
level 7
gMr 楼主
快速排序(喜闻乐见):
气死我了,写了一大堆全没了[喷]https://www.cnblogs.com/MOBIN/p/4681369.html
这个链接讲的挺好的,对应着看看吧
2018年09月10日 09点09分 21
你写二分排序多简单……
2018年09月16日 12点09分
gMr
啥?这不是二分排序啊。。。二分排序是对插入排序的一种优化。。。
2018年09月17日 10点09分
1 2 尾页