
排序算法总结
Tsaryu
这个作者很懒,什么都没留下…
展开
-
冒泡排序算法(含题目推荐 )
冒泡排序算法是排序算法里面基础算法之一,其理解简单,编程难度小,但是对于初学者来说,理解还是需要认真静下心来手动推演。其实冒泡排序算法的核心思想就是:每一次从头开始遍历,比较相邻的数,然后把大的数向后面移动(以升序为例),所以每一次遍历,都可以把目前最大的数移到后面,后面的数不需要操作,所以每次遍历的终止条件是 j 从 1 到 i-1;i表示遍历的次数,i+1 到n表示已经排序好的数。时间复杂度:...原创 2018-04-18 10:03:04 · 4097 阅读 · 0 评论 -
快速排序算法
快速排序算法在网上存在很多版本,大致思路是一样的,都是找到基准,然后比基准大的,放在基准左边,比基准小的数,放在基准右边(以升序为例),依次递归,每次递归都将基准排到了正确的位置。我利用洛谷的一个评测题目来测试不同版本的快排,不少版本的都会超时,于是最后确定了如下模板的快排算法。#include <cstdio>#include <iostream>using name...原创 2018-04-19 10:39:39 · 247 阅读 · 0 评论 -
插入排序
插入排序是一种很简单朴实的排序方法。首先,我们知道,单独一个数肯定是一个有序的,因为只有它一个数字。然后我们从第二个数字开始,把第二个数字加进第一个有序列里,使其两个数字有序【1,2】接着我们把第三个数字也加进去......最后一个数字也加进去,有序列就包含了全部的数字了,此时排序也完成了。#include <cstdio>#include <iostream>usin...原创 2018-04-19 11:04:41 · 200 阅读 · 0 评论 -
希尔排序
希尔排序其实是直接插入排序的一个改进,书本上说是众多排序算法中的第一批突破时间复杂度O(N2)的排序算法。希尔排序的算法时间稳定,较快排来说,快排的最快时间复杂度是 O(nlogn),最快比希尔快,最慢比希尔慢。所以如果数据可能会比较差的话,用希尔可能要比快排更加好。希尔排序的核心思想就是在直接插入排序的基础上设置一个增量d = n / 2,然后每次比较间隔为d的数据而不是直接插入排序的 ,间隔为...原创 2018-04-19 15:54:34 · 235 阅读 · 0 评论 -
归并排序
归并排序,感觉思想其实就是递归思想。一列数排序,长度为n我们两两在一起排列,排列好之后再合并合并过之后再两两排列合并最后合并成n个数,即最终的有序序列。结束。代码很简单,思想也很简单,而且很稳定有木有。最好情况O(n),最坏是O(nlogn),平均是O(nlogn)代码模板如下:#include <cstdio>#include <iostream>using name...原创 2018-04-19 21:21:01 · 233 阅读 · 0 评论 -
堆排序(选择排序的进阶)
堆排序这个理解思想挺简单的。以升序排序为例:就是一个完全二叉树,根结点始终小于子节点。最开始是无序状态的堆,这时候我们需要解决两个问题:(1)如何让无序状态的堆变成有序状态的堆(2)如何输出堆顶元素后使得剩余元素成为新堆且满足以上要求解决问题一: 我们从最后的一个非叶子节点开始,比较此节点和它的子节点,保证这个子树是有序的,如果无序我们就层层交换,以使得有序。解决问题二: 我们每次输出...原创 2018-04-20 15:27:25 · 294 阅读 · 0 评论