![](https://img-blog.csdnimg.cn/20201219091517106.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
废物自救指南---算法
动态规划的人生比贪心更有意思
SuperBetterMan
正在成为一名High Level的程序猿
展开
-
探讨经典排序(6)---归并排序
归并:讲两个或多个有序序列合并成一个m路归并,每一次归并都需要比对m-1个元素以2路归并为例int c[4]=[1,3,8,10]; int d[5]=[5,7,9,26,75];开辟一个新空间B[9]c[0]与d[0]比对,把小的元素c[0]放入B[0]c[1]与d[0]比对,把小的元素c[1]放入B[1]继续上述步骤直到c已经遍历完,直接把d剩余元素放入B中我们的归并排序实际上就是在2路归并的基础上其核心思想就是把数组内两个有序序列归并成一个int *B=(int.原创 2021-09-28 16:26:38 · 259 阅读 · 0 评论 -
探讨经典排序(5)---冒泡排序
那年18,第一次接触排序,就是冒泡排序!冒泡排序算法原理从后往前(前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完。称这样过程为"一趟"冒泡排序,最多只需n-1趟排序每一趟排序都可以使一个元素移动到最终位置,已经确定最终位置的元素在之后无需参与比对如果某一趟排序过程未发生交换,则说明该序列已经有序,即可提前结束//交换元素void swap(int &a, int &b){ int temp = a; a = b; b = temp;}//冒.原创 2021-09-25 10:51:21 · 140 阅读 · 0 评论 -
用递归法解决汉诺塔与快速排序算法
1. 什么是递归递归,就是在运行的过程中调用自己。2. 递归的两个条件子问题须与原始问题为同样的事,且更为简单;不能无限制地调用本身,比须有结束。以上是关于递归的介绍,接下来以汉诺塔与快排两个实例去在代码感受递归的魅力!汉诺塔问题三个柱子,在X柱上有若干个圆环,从小到大排列好。现在要把这些圆环从X移到Z中,且一次只能移动一个,也必须遵循从小到大原则。核心思想是:每一回把X中最下面的移到Z中以X中有64个圆环为例:将前63个移到Y中把第64个移到Z中现在问题回到了开始,只是原创 2021-07-02 23:24:44 · 459 阅读 · 3 评论 -
探讨经典排序(4)---堆排序
堆排序堆排序(HeapSort)用堆(一种完全二叉树的数据结构)实现排序,而堆又分为大顶堆与小顶堆。我百度一张照片,用于形象描述二者区别,感谢这位知乎朋友@think123什么是大小顶堆?>>大顶堆:每一个节点的值都大于或者等于其左右子节点的值>>小顶堆:每一个节点的值都小于或者等于其左右子节点的值大小顶堆的重要性质把顶堆放在数组 a[ ] 中,a[i]表示父节点,a[2*i+1]表示左子节点,a[ 2 * i+2]大顶堆: a[i]>=a[ 2 * i+原创 2021-02-02 20:12:00 · 205 阅读 · 0 评论 -
探讨经典排序(3)---简单选择排序
简单选择排序顾名思义,该排序很简单,掌握起来不难。即每一次找到最小的值,放在待排序序列的第一个位置,并将该位置从待排序序列中移除。举个例子,[8,5,10,3]#include<stdio.h>void SelectSort(int a[],int n){ int i,j,min,temp; for(i=0;i<n-1;i++){ min=i;//初始最小下标为0 for(j=i+1;j<n;j++){ //找到每轮最小的数 if(a[min.原创 2021-02-01 22:47:27 · 108 阅读 · 0 评论 -
探讨经典排序(2)---希尔排序
希尔排序我这里写了一个序列如下图所示,希尔排序的关键在于关键距离gap。gap为两个要比较元素的距离,首先我们设置为最大为2,就是8与10比,5与3比。执行完后,将gap变小,进行执行,直到gap=1,不再执行。其实这里面也是利用直接插入的思想,利用一个key的元素存放比较时位置靠后的元素,如果需要交换,直接将小的值覆盖在大的值上面,在把key覆盖到小的值上,以完成交换的目的。时间复杂度希尔排序的时间复杂度要取决于gap的选取,通过大量的数据表明gap=gap/3+1是一种较为常用的做法。平均时原创 2020-12-20 20:24:01 · 292 阅读 · 1 评论 -
探讨经典排序(1)---直接插入排序
前言:排序是算法中很基础又和主要的一个模块,我们需要花时间去掌握。通常我们说排序是八大排序,事实上应该是九大排序,因为有一个排序,我们其实是不讨论的。我这里使用一张别人的图片,来解释他们之间的关系。声明:该系列排序是在此博主的未完成的基础上进行二次加工我们来介绍几个概念内排序:在对待排序数据存放在内存中进行的排序过程。外排序:待排数据量太大,无法一次性将所有待排序数据放入内存中,在排序过程中需要对磁盘等外部储存器进行访问。比较排序:排序过程中需要对数据关键字进行比较。非比较排序:排序过程.原创 2020-12-19 18:58:23 · 211 阅读 · 1 评论