sort
jty7
这个作者很懒,什么都没留下…
展开
-
冒泡排序的改进(Modified_Bubble_Sort)
之前我介绍过冒泡排序(通往冒泡排序的传送门),冒泡排序的时间复杂度是很高的,现在说一下冒泡排序的最优化的一种方式,双向排序。 此排序的原理为,一个无序的序列,先对其从头进行遍历,若当前值大于下一值就进行交换(这里是按照由小到大排的),遍历完一次后记录最后一次交换的位置,再以那个位置作为起始点,从后往前进行遍历,若当前值小于下一值就进行交换,同样记录最后一次交换的位置,...原创 2016-12-26 14:55:05 · 370 阅读 · 0 评论 -
归并排序(Merge_Sort)
归并排序是利用分治(把大问题拆成若干个小问题,且小问题一定是有解的)的思想来排序的,归并排序的基本操作是,假定一个无序的序列{23,64,12,31,10,8,79,55},要把它变成一个有序数列就先要把其平均分为两个数组A{23,64,12,31},B{10,8,79,55}。再把A,B进行排序,对A,B排序就是两个相对较小的问题。数组A进行排序的方法也是把A平均分成2个数组A1{...原创 2016-12-26 12:35:06 · 280 阅读 · 0 评论 -
快速排序(Quick_Sort)
我个人认为,快速排序是一个十分经典的排序方法,顾名思义,快排确实比其他普通排序算法要快,空间复杂度也不是特别高。 所谓快排,先讲一下大体上的操作,我先让待排序序列的第一个元素作为一个“哨兵”,用这个哨兵把序列分成两部分,前一部分比该哨兵的值小,后一部分比该哨兵的值要大。然后我分别对前后两个序列分别快排,也就是重复此操作。但是要完成快排还要解决一件事,就是如何用哨兵把原...原创 2016-12-19 16:56:10 · 426 阅读 · 0 评论 -
桶排序(Bucket_sort)
桶排序,这种排序方法与其他方法不同,因为它不是比较排序,而是通过映射来完成排序的。要开数组的大小要大于数组元素最大值的,初始化数组里的所有元素存的都为0,遍历这个序列,序列的元素每出现过一次便在数组相应的下标位置的数+1。遍历完整个序列,排序也就完成了。桶排序的时间复杂度为O(n),但是这种排序是十分消耗空间的。详情见代码。 #include<cstdio> #inc...原创 2016-12-19 16:19:12 · 2234 阅读 · 0 评论 -
希尔排序(Shell_Sort)
希尔排序只是插入排序的一种更高效率的改进方法,它是缩小增量排序,其方法跟插入排序(通往插入排序的传送门)方法大致相同,不同点是插入排序每次都去寻找它的下一个元素所在的位置,而希尔排序是第一次去寻找它的下d1(所谓的增量,d1=n/2)个元素的位置(直到寻找完整个序列),下一次去寻找它的下d2个元素的位置 (d2=d1/2),直到增量dt=1的时候排序才结束。也可以把希尔排序理解为一种...原创 2016-12-19 15:25:28 · 311 阅读 · 0 评论 -
插入排序(Insert_Sort)
所谓插入排序,就是先在无序的序列中(初始序列认为,除了第一个元素以外是无序的)找第一个元素,之后在有序序列(初始状态认为第一个元素是有序的,以后每往有序区插入一个元素,有序区长度自然加一)中找到这个元素应该在的位置,把它插入到这个位置,并且后面的元素依次往后移,重复以上操作,直到整个序列全变成有序的为止。插入排序的平均时间复杂度为O(n^2),此排序相对稳定。详情见代码。 ...原创 2016-12-19 12:51:07 · 803 阅读 · 0 评论 -
选择排序(Select_Sort)
所谓选择排序,就是每次找到未排序中最小的(最大的也行)元素的位置,找到后与该位置与未排序序列的第一个元素交换值,直到该序列成为有序序列。初始状态整个序列为无序序列,每次交换都使有序序列的长度加一,无序序列的起始位置后移一位。选择排序的平均时间复杂度为O(n^2),且选择排序相对不稳定。详情见代码。 #include<cstdio> #define maxn 1000+...原创 2016-12-16 17:03:42 · 5935 阅读 · 0 评论 -
冒泡排序(Bubble_Sort)
冒泡排序可能是大家最先接触的排序方法。所谓冒泡排序就是把最小的数值“浮到”数组的最上端,或者是把最大的数值“沉到”数组最底端。当我对数组遍历的时候,每次比较当前数值与下一个数值,如果当前数值比下一数值大,交换两位置数值。假如当前数值为最大数值,则会一直交换到数组底端(这句话需要仔细想想),这就是所谓的“下沉”,经过此操作最后一个位置的值就一定是最大值。如果有n个元素,最后一个元素已经...原创 2016-12-16 16:58:18 · 441 阅读 · 2 评论