![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 65
等芦荟开花
这个作者很懒,什么都没留下…
展开
-
算法——排序(七)归并排序
归并排序——2-路归并排序1、算法思路:将两个或者两个以上的有序表合成一个新的有序表;2、时间复杂度O(nlogn) ,空间复杂度O(n) , 稳定的3、程序需要注意的问题:(1)MSort需要用到O(n)的额外空间; 需要另设置一个相同的结构,L[m,n]的排序,递归实现——L[m,s]-L[s+1,n]MSort(l,p,m,s);MSort(l,p,s+原创 2016-06-30 17:26:04 · 307 阅读 · 0 评论 -
算法——排序(二)希尔排序
希尔排序(又称 缩小增量排序)插入排序中的一种1.算法基本思想:将待排序列分成若干子序列(不是逐段分割成子序列,将相隔某个增量的记录组成子序列),分类别进行直接插入排序,待整个序列基本有序时候,再对整个序列进行一次直接插入排序dk=1。2. 增量dk序列(每个dk是质数,且最后一个dk一定是1)(eg.[5,3,1])3. 时间复杂度O(n1.5)——最好情况下,空间原创 2016-06-15 10:05:52 · 280 阅读 · 0 评论 -
算法——排序(三)冒泡排序
#include using namespace std;void BubbleSort (int *l ,int n){ for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(l[i]>l[j]) swap(l[i],l[j]); } }}int main(){原创 2016-06-20 10:54:49 · 264 阅读 · 0 评论 -
算法——排序(一)直接插入排序
直接插入排序时间复杂度和平均时间复杂度O(n2)空间复杂读O(1) 稳定排序#include #include #include using namespace std;void InSort ( int* L,int n) { //对数组L进行直接插入排序 int i,j; for(i=2;i<=n;i++){ if(L[i]<L[i-1]){原创 2016-06-15 09:58:50 · 303 阅读 · 0 评论 -
算法——排序(四)快速排序
快速排序1、时间复杂度O(nlogn)~O(n2)2、空间复杂度O(logn)~O(n):排序排序需要栈空间实现递归3、不稳定的4、快速排序的思想:带排序列经过一次快排划分,可以得到(子序列key),然后对其子序列进行排序#include using namespace std;int partion(int *l, int low, int hig){ l[0原创 2016-06-21 11:15:11 · 573 阅读 · 0 评论 -
算法——排序(五)选择排序
选择排序---简单选择排序1、基本思想:每一趟排序(第i趟)从剩下的元素中(n-i个元素中)选择最小的元素作为有序序列的第i个元素2、选择排序和冒泡排序的区别:冒泡排序是 两两比较 逐个交换,最小或者最大的元素是逐个上升或下降的;选择排序是 两两比较找到最大或最小元素 直接交换到指定位置 最小或最大元素不是逐个两两交换的,是直接交换; 记录每一趟排序原创 2016-06-22 15:29:22 · 447 阅读 · 0 评论 -
算法——排序(六)堆排序
堆排序1、时间复杂度O(nlogn) O(nlogn),空间复杂度O(1),不稳定!!!2、基本原理:输出堆顶的最小元素以后,使得剩余的m-1个元素的序列有建立一个堆,得到m-1个元素中的次小值,反复执行下去就得到一个有序堆,这个过程就是堆排序。两个关键步骤:筛选(自堆顶至叶子结点自上而下调整合适位置的过程);从无序序列建堆(反复筛选的过程,对于n个原创 2016-06-23 16:54:41 · 293 阅读 · 0 评论